Laboratorium Podstaw Programowania 2 |
---|
ĆWICZENIE 10 |
Data wykonania ćwiczenia: 17.05.2012 |
Wstęp teoretyczny
Programowanie obiektowe - paradygmat programowania, w którym programy definiuje się za pomocą obiektów - elementów łączących stan (czyli dane, nazywane najczęściej polami) i zachowanie (czyli procedury, tu: metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań. Podejście to różni się od tradycyjnego programowania proceduralnego, gdzie dane i procedury nie są ze sobą bezpośrednio związane. Programowanie obiektowe ma ułatwić pisanie, konserwację i wielokrotne użycie programów lub ich fragmentów. Największym atutem programowania, projektowania oraz analizy obiektowej jest zgodność takiego podejścia z rzeczywistością - mózg ludzki jest w naturalny sposób najlepiej przystosowany do takiego podejścia przy przetwarzaniu informacji.
Programy
Zadanie 1.
Utwórz klasę Zarowka. Klasa powinna zawierać metody:
- zapalZarowke(), która będzie wyświetlała napis: „Żarówka zapalona”;
- zgasZarowke(),która będzie wyświetlała napis: „Żarówka zgaszona”;
- rozjasnijZarowke()która będzie wyświetlała napis: „Żarówka rozjaśniona”;
- przyciemnijZarowke()która będzie wyświetlała napis: „Żarówka przyciemniona”.
Kod źródłowy:
Unit BIBLIO; interface type Zarowka = object procedure zapalZarowke; procedure zgasZarowke; procedure rozjasnijZarowke; procedure przyciemnijZarowke; end; implementation procedure Zarowka.zapalZarowke; begin writeln('Zarowka zapalona') end; procedure Zarowka.zgasZarowke; begin writeln('Zarowka zgaszona'); end; procedure Zarowka.rozjasnijZarowke; begin writeln('Zarowka rozjasniona'); end; procedure Zarowka.przyciemnijZarowke; begin writeln('Zarowka przyciemniona'); end; end. program lab10zad1; uses crt,BIBLIO; var z:Zarowka; begin clrscr; z.zapalZarowke; z.zgasZarowke; z.rozjasnijZarowke; z.przyciemnijZarowke; readln; end. |
W tym module definiujemy klase o nzaie zarowka, i metody zapalZarowke, zgasZarowke, rozjasnijZarowke, przyciemnijZarowke. W głównym programie wczytywany jest modol BIBLIO, a następnie twozona zmienna typu zarowka. Program wykonuje się. |
---|
Zadanie 2.
Utwórz klasę Punkt, która będzie zawierać współrzędne punktu (x, y). Klasa ta powinna zawierać metody:
- ustawX(), która będzie ustawiała wartość współrzędnej punktu X;
- pobierzX(), która będzie zwracała przechowywaną wartość współrzędnej punktu X;
- ustawY(), która będzie ustawiała wartość współrzędnej punktu Y;
- pobierzY(), która będzie zwracała przechowywaną wartość współrzędnej punktu Y;
- wyswietlWspolrzędne(), która będzie wyświetlać współrzędne punktu X i Y.
Kod źródłowy:
unit BIBLIO2; interface type Punkt = object x,y:integer; procedure ustawX(wspx:integer); function pobierzX:integer; procedure ustawY(wspy:integer); function pobierzY:integer; procedure wyswietlWspolrzedne(a,b:integer); end; implementation procedure Punkt.ustawX(wspx:integer); begin x:=wspx; end; function Punkt.pobierzX:integer; begin pobierzX:=x; end; procedure Punkt.ustawY(wspy:integer); begin y:=wspy; end; function Punkt.pobierzY:integer; begin pobierzY:=y; end; procedure Punkt.wyswietlWspolrzedne(a,b:integer); begin writeln('X=',a); writeln('Y=',b); end; end. Program lab10_zad2; uses crt,BIBLIO2; var z:Punkt; begin clrscr; z.ustawX(5); z.ustawY(3); z.wyswietlWspolrzedne(z.pobierzX,z.pobierzY); readln; end. |
Na początku tworzona jest klasa o nazwie Punkt w której znajdują się metody które pobierają punkty oraz klasa która zwraca te punkty. W programie głównym przekazane są przez parametry do metod współrzędne punktów X i Y a następnie uruchomienie procedury wyświetlającej. |
---|
Zadanie 3.
Utwórz klasę, której obiekt będzie mógł wykonywać następujące operacje na liczbach zespolonych :
1. Wyświetlanie liczby zespolonej w postaci a+jb;
2. Obliczanie liczby sprzężonej do danej liczby zespolonej;
3. Obliczanie modułu liczby zespolonej;
4. Obliczanie kąta liczby zespolonej;
5. Dodawanie do jednej liczby zespolonej drugiej liczby zespolonej. Wynik należy zapisać w obiekcie wywołującym metodę np.: a.dodaj(b) wynik w a.
6. Odejmowanie od jednej liczby zespolonej drugiej liczby zespolonej. Wynik należy zapisać w obiekcie wywołującym metodę np.: a.odejmij(b) wynik w a.
7. Mnożenie jednej liczby zespolonej przez drugą liczbę zespoloną. Wynik należy zapisać w obiekcie wywołującym metodę np.: a.mnoz(b) wynik w a.
8. Dzielenie jednej liczby zespolonej przez drugą liczbę zespoloną. Wynik należy zapisać w obiekcie wywołującym metodę np.: a.dziel(b) wynik w a.
Kod źródłowy:
program lab10zad3; uses math,crt; type liczba = object private Re: real; Im: real; public procedure ustawRe(a:real); function pobierzRe:real; procedure ustawIm(a:real); function pobierzIm:real; function sprzezona:liczba; function obliczModul:real; function obliczKat:real; procedure wyswietlLiczbeZesp; procedure dodaj(b:liczba); procedure odejmij(b:liczba); procedure mnoz(b:liczba); procedure dziel(b:liczba); end; procedure liczba.ustawRe(a:real); begin Re:=a; end; function liczba.pobierzRe:real; begin pobierzRe:=Re; end; procedure liczba.ustawIm(a:real); begin Im:=a; end; function liczba.pobierzIm:real; begin pobierzIm:=Im; end; function liczba.sprzezona:liczba; var a:liczba; begin a.Re:=Re; a.Im:=-Im; sprzezona:=a; end; function liczba.obliczModul:real; begin obliczModul:=sqrt((Re*Re)+(Im*Im)); end; function liczba.obliczKat:real; begin if obliczModul<>0 then obliczKat:=radtodeg(arcsin(Im / obliczModul)) else writeln('Dzielenie przez zero!'); end; procedure liczba.wyswietlLiczbeZesp; begin {wypisywanie liczby} if Re<>0 then write(Re:1:2); if Im>0 then writeln(' + j * ',Im:1:2); if Im=0 then writeln(); if Im<0 then writeln(' - j * ',-Im:1:2); end; procedure liczba.dodaj(b:liczba); begin Re:=Re+b.Re; Im:=Im+b.Im; end; procedure liczba.odejmij(b:liczba); begin Re:=Re-b.Re; Im:=Im-b.Im; end; procedure liczba.mnoz(b:liczba); begin Re:=Re*b.Re; Im:=Im*b.Re; end; procedure liczba.dziel(b:liczba); begin if (b.Re<>0) and (b.Im<>0) then begin Re:=Re / b.Re; Im:=Im / b.Im; end else writeln('Dzielenie przez zero!'); end; procedure MENU; var a,b:liczba; tmp:real; begin clrscr; {wczytywanie Im i Re obu liczb} write('Podaj czesc rzeczywista pierwszej liczby: '); readln(tmp); a.ustawRe(tmp); write('Podaj czesc urojana pierwszej liczby: '); readln(tmp); a.ustawIm(tmp); write('Podaj czesc rzeczywista drugiej liczby: '); readln(tmp); b.ustawRe(tmp); write('Podaj czesc urojona drugiej liczby: '); readln(tmp); b.ustawIm(tmp); repeat {menu} clrscr; writeln(' MENU '); writeln('1. Wyswietlanie liczby zespolonej '); writeln('2. Obliczanie liczby sprezonej '); writeln('3. Obliczanie modulu liczby zespolonej'); writeln('4. Obliczanie kata liczby zespolonej '); writeln('5. Dodawanie liczb zespolonych '); writeln('6. Odejmowanie liczb zespolonych '); writeln('7. Mnozenie liczb zespolonych '); writeln('8. Dzielenie liczb zespolonych '); writeln('0. Wyjscie '); write('Wybierz: '); readln(tmp); case (trunc(tmp)) of 1: begin {dla wyboru 1 wyswietlenie obu liczb} clrscr; write('Pierwsza liczba zespolona: '); a.wyswietlLiczbeZesp; write('Druga liczba zespolona: '); b.wyswietlLiczbeZesp; readln; end; 2: begin clrscr; write('Liczba sprzezona do liczby: '); a.wyswietlLiczbeZesp; write('to: '); a.sprzezona.wyswietlLiczbeZesp; write('Liczba sprzezona do liczby: '); b.wyswietlLiczbeZesp; write('to: '); b.sprzezona.wyswietlLiczbeZesp; readln; end; 3: begin clrscr; write('Modul z liczby: '); a.wyswietlLiczbeZesp; writeln('to: ',a.obliczModul:1:2); write('Modul z liczby: '); b.wyswietlLiczbeZesp; writeln('to: ',b.obliczModul:1:2); readln; end; 4: begin clrscr; write('Kat liczby zespolonej: '); a.wyswietlLiczbeZesp; writeln('do OX wynosi: ',a.obliczKat:1:2); write('Kat liczby zespolonej: '); b.wyswietlLiczbeZesp; writeln('do OX wynosi: ',b.obliczKat:1:2); readln; end; 5: begin clrscr; write('Pierwsza liczba zespolona: '); a.wyswietlLiczbeZesp; write('Druga liczba zespolona: '); b.wyswietlLiczbeZesp; writeln; write('Wynik dodawania: '); a.dodaj(b); a.wyswietlLiczbeZesp; readln; end; 6: begin clrscr; write('Pierwsza liczba zespolona: '); a.wyswietlLiczbeZesp; write('Druga liczba zespolona :'); b.wyswietlLiczbeZesp; writeln; write('Wynik odejmowania: '); a.odejmij(b); a.wyswietlLiczbeZesp; readln; end; 7: begin clrscr; write('Pierwsza liczba zespolona: '); a.wyswietlLiczbeZesp; write('Druga liczba zespolona :'); b.wyswietlLiczbeZesp; writeln; write('Wynik mnozenia: '); a.mnoz(b); a.wyswietlLiczbeZesp; readln; end; 8: begin clrscr; write('Pierwsza liczba zespolona: '); a.wyswietlLiczbeZesp; write('Druga liczba zespolona :'); b.wyswietlLiczbeZesp; writeln; write('Wynik dzielenia: '); a.dziel(b); a.wyswietlLiczbeZesp; readln; end; 0: halt; end; until (0<>0); {program bedzie sie wykonywal w nieskonczonosc, chyba ze uzytkownik wybierze 0} end; BEGIN MENU; readln; END. |
---|
Opis programu:
procedure liczba.ustawRe – procedura odpowiada za przypisanie Re wartosci podanej jako argument.
function liczba.pobierzRe – odpowiadza za wypisanie liczby rzeczywistej (Re).
procedure liczba.ustawIm – procedura odpowiada za przypisanie Im wartosci podanej jako argument.
function liczba.pobierzIm – odpowiada za wypisanie liczby urojonej (Im).
function liczba.sprzezona – ta funkcja zwraca liczbe sprzężona.
function liczba.obliczModul – ta funkcja zwraca modulo
procedure liczba.wyswietlLiczbeZesp – ta procedura odpowiada za wyświetlanie liczby zespolonej.
procedure liczba.dodaj – procedura dodaje dwie liczby zepolone
procedure liczba.odejmij – procedura odejmuje liczby zespolone
procedure liczba.mnoz – procedura mnozy liczby zespolone
procedure liczba.dziel – procedura dzieli liczby zespolone
procedurę MENU – W tej procedurze zawarte jest menu programu. Jest ona komunikatorem miedzy użytkownikiem a programem. Przy pomocy instrukcji case wywoływane są poszczególne opcje programu.
Wnioski
Wykonane na zajęciach laboratoryjnych programy pozwoliły nam bliżej zapoznać się z programowaniem obiektowym. Zadania wykonywane przy pomocy programowania obiektowego różnią się od zwykłych zadań.