sprawozdanie programowanie lab11 fin

Politechnika Świętokrzyska w Kielcach Wydział Elektrotechniki, Automatyki i Informatyki
Laboratorium Podstaw Programowania 2
Lab. nr 11

Data wykonania ćwiczenia :

20.05.2012

1.Przemysław Wolski

1. Wstęp Teoretyczny

Dotychczas tworzone przez nas programy były programami strukturalnymi. Oznacza, to że kod tych programów był podzielony na podprogramy działające na

określonych przez nas zmiennych. Przepływ sterowania pomiędzy tymi podprogramami, czyli kolejność w jakiej są one wywoływane jest określona jawnie. Podejście

strukturalne, mimo wielu zalet, takich jak prostota zapisu programu, możliwość wielokrotnego wykorzystania kodu, ma też liczne wady. Do najpoważniejszych należą

oddzielenie kodu od danych na których przeprowadza on operacje oraz ubogi mechanizm kontroli widoczności zmiennych. Pierwsza z nich powoduje, że pisząc program

myślimy o rozwiązywanym problemie nie w kategoriach tego problemu, ale w kategoriach języka programowania, który służy nam do zapisania kodu programu (np.:

„wywołaj funkcję wyszukującą w tablicy rekord zawierający dane studenta o określonym nazwisku”). Ponadto, jeśli swój kod udostępnimy innym programistom, np.:

w postaci biblioteki, to może się okazać, że zignorują oni napisane przez nas funkcje i procedury i będą bezpośrednio odwoływać się do zmiennych i struktur danych lub

będą niewłaściwie posługiwać się stworzonymi przez nas podprogramami. W obu przypadkach takie działanie może skończyć się katastrofą. Druga wada wiąże się

z opisanym przed chwilą zagrożeniem, jak również wprowadza nowe – w kodzie dużych programów, tworzonych na potrzeby dużych projektów informatycznych bardzo

trudno jest zapanować nad nazwami zmiennych, co bardzo często prowadziło do załamania się prac nad takimi projektami i przynosiło firmom ogromne straty1.

Odpowiedzią specjalistów od inżynierii oprogramowania na te problemy było wprowadzenie nowej metodologii tworzenia programów, którą nazwano techniką

obiektową. To pojęcie obejmuje trzy osobne zagadnienia: analizę obiektową (ang. OOA = Object Oriented Analysis), projektowanie obiektowe (ang. Object Oriented

Design) i programowanie obiektowe (ang. Object Oriented Programming). Ten wykład będzie obejmował ostanie zagadnienie, do dwóch pierwszych wrócimy innym

razem. Z pojęciem obiektowości wiąże się pojęcie abstrakcyjnych typów danych, z którym spotkaliśmy się przy okazji omawiania dynamicznych struktur danych. Takim

typem był np.: stos. Aby go zdefiniować musieliśmy określić typ pojedynczego elementu takiego stosu (typ bazowy stosu) i operacje, które możemy na tych elementach

przeprowadzać. Zgodnie z tym co zostało napisane wyżej, programista korzystający z naszego kodu może te operacje ominąć implementując ich własne wersje.

Programowanie obiektowe idzie o krok dalej: pozwala zadeklarować zmienne i związać z nimi operacje, tak, aby nie można ich było rozdzielić. W dużym uproszczeniu

można określić programowanie obiektowe jako programowanie polegające na deklarowaniu nowych typów danych, opisujących pojęcia właściwe dla rozwiązywanego

problemu. Takie typy danych będziemy nazywać klasami, a zmienne tych typów – obiektami.

2. Przebieg laboratorium

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”.

Program lab10zad1;

uses crt,LAB;

var

p:Zarowka;

begin

clrscr;

p.zapalZarowke;

p.zgasZarowke;

p.rozjasnijZarowke;

p.przyciemnijZarowke;

readln;

end.

Treść zadania wykorzystującego moduł LAB

Początek programu głównego

Wywołanie procedur.

unit LAB;

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.

Moduł LAB

Zdefiniowanie obiektu z 4 metodami.

Implementacja metod modułu.

Procedura wyświetlająca napis o treści "Żarówka zapalona"

Procedura wyświetlająca napis o treści "Żarówka zgaszona"

Procedura wyświetlająca napis o treści "Żarówka rozjaśniona"

Procedura wyświetlająca napis o treści "Żarówka przyciemniona"

Koniec modułu.

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.

program zad2;

uses crt,LAB2;

var

z:Punkt;

begin

clrscr;

z.ustawX(3);

z.ustawY(5);

z.wyswietlWspolrzedne(z.pobierzX,z.pobierzY);

end.

Program wykorzystujący moduł LAB2

Ustawienie wartości X na "3"

Ustawienie wartości Y na "5"

Wyświetlenie obu liczb jako współrzędnych punktu.

unit LAB2;

interface

type

Punkt = object

x,y:integer;

procedure ustawX(wX:integer);

function pobierzX:integer;

procedure ustawY(wY:integer);

function pobierzY:integer;

procedure wyswietlWspolrzedne(d,c:integer);

end;

implementation

procedure Punkt.ustawX(wX:integer);

begin

x:=wX;

end;

function Punkt.pobierzX:integer;

begin

pobierzX:=x;

end;

procedure Punkt.ustawY(wY:integer);

begin

y:=wY;

end;

function Punkt.pobierzY:integer;

begin

pobierzY:=y;

end;

procedure Punkt.wyswietlWspolrzedne(d,c:integer);

begin

writeln('Wspolrzedne: ',d,',',c);

readln;

end;

end.

Zdefiniowanie obiektu "Punkt"

O polach x i y, oraz 5 metod

Procedura ustawiająca wartość wpisaną w programie wykorzystującym moduł na X.

Funkcja pobierająca wartość z procedury ustawX i przekazuje do procedury wyświetlającej.

Procedura ustawiająca wartość wpisaną w programie wykorzystującym moduł na Y.

Funkcja pobierająca wartość z procedury ustawY i przekazuje do procedury wyświetlającej.

Procedura wyświetlająca współrzędne punktu.

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.

Klasa zawiera:

Pola:

 Re

 Im

Metody:

 ustawRe()

 pobierzRe()

 ustawIm()

 pobierzIm()

 sprzezona()

 obliczModul()

 obliczKat()

 wyswietlLiczbeZesp()

 dodaj()

 odejmij()

 mnoz()

 dziel()

 drukuj()

program zad2;

uses crt,LAB3;

var

z:Zespolona;

Re,Im,Re2,Im2:integer;

begin

clrscr;

textcolor(yellow);

write('podaj liczbe rzeczywista: ');

readln(Re);

write('podaj liczbe urojona: ');

readln(Im);

z.ustawRe(Re);

z.ustawIm(Im);

textcolor(green);

writeln('Pierwsza liczba zespolona: ');

z.drukuj(Re,Im);

textcolor(white);

writeln('Modul: ',z.obliczModul(Re,Im):4:2);

writeln('Kat liczby zespolonej: ');

z.obliczKat(Re,Im);

z.sprzezona(Re,Im);

textcolor(yellow);

write('podaj 2 liczbe rzeczywista: ');

readln(Re2);

write('podaj 2 liczbe zespolona: ');

readln(Im2);

textcolor(green);

writeln('Druga liczba zespolona: ');

z.drukuj(Re2,Im2);

textcolor(white);

z.dodaj(Re,Im,Re2,Im2);

z.odejmij(Re,Im,Re2,Im2);

z.mnoz(Re,Im,Re2,Im2);

z.dziel(Re,Im,Re2,Im2);

readln;

end.

Program wykorzystujący moduł LAB3

Deklaracja liczby pierwszej i liczby drugiej.

Wczytywanie pierwszej liczby.

Ustawienie wpisanej wartości.

Wyświetlenie liczby zespolonej.

Wyświetlenie modułu.

Wyświetlenie kąta.

Wczytanie drugiej liczby.

Wyświetlenie 2 liczby zespolonej.

Operacje kolejno: dodawania, odejmowania, mnożenia, dzielenia.

unit LAB3;

interface

type

Zespolona = object

Re,Im:integer;

procedure ustawRe(wX:integer);

function pobierzRe:integer;

procedure ustawIm(wY:integer);

function pobierzIm:integer;

procedure sprzezona(x,y:integer);

function obliczModul(x,y:integer):real;

procedure obliczKat(x,y:integer);

procedure dodaj(x,y,c,v:integer);

procedure odejmij(x,y,c,v:integer);

procedure mnoz(x,y,c,v:integer);

procedure drukuj(x,y:integer);

procedure dziel(x,y,c,v:integer);

end;

implementation

procedure Zespolona.ustawRe(wX:integer);

begin

Re:=wX;

end;

function Zespolona.pobierzRe:integer;

begin

pobierzRe:=Re;

end;

procedure Zespolona.ustawIm(wY:integer);

begin

Im:=wY;

end;

function Zespolona.pobierzIm:integer;

begin

pobierzIm:=Im;

end;

procedure Zespolona.sprzezona(x,y:integer);

begin

writeln('Liczba sprzerzona: ',x,'-',y,'j');

end;

function Zespolona.obliczModul(x,y:integer):real;

begin

obliczModul:=sqrt(x*x+y*y);

end;

procedure Zespolona.obliczKat(x,y:integer);

var

modu:integer;

begin

modu:=(x*x+y*y);

writeln('sin FI= ',x/modu:4:2);

writeln('cos FI= ',y/modu:4:2);

end;

procedure Zespolona.dodaj(x,y,c,v:integer);

begin

writeln('Suma to: ',x+c,'+',y+v,'j');

end;

procedure Zespolona.odejmij(x,y,c,v:integer);

begin

if y-v>=0 then

writeln('Roznica to: ',x-c,'+',y-v,'j')

else writeln('Roznica to: ',x-c,'',y-v,'j');

end;

procedure Zespolona.mnoz(x,y,c,v:integer);

var

m1,m2,m3:integer;

begin

m1:=-1*(y*v);

m2:=x*y+m1;

m3:=c*y+x*v;

if m3>=0 then

writeln('Iloczyn: ',m2,'+',m3,'j')

else

writeln('Iloczyn: ',m2,'',m3,'j');

end;

procedure Zespolona.drukuj(x,y:integer);

begin

if y>=0 then

writeln(x,'+',y,'j')

else

writeln(x,'',y,'j');

end;

procedure Zespolona.dziel(x,y,c,v:integer);

begin

writeln('Iloraz to: ',x / c:4:1,'+',y / v:4:1,'j')

end;

end.

Zdefiniowanie obiektu o polach Re i Im i dwunastu metodach.

Procedura ustawiająca liczbę Re.

Funkcja pobierająca Re z ustawRe i przypisująca do nazwy funkcji.

Procedura ustawiająca liczbę Im.

Funkcja pobierająca Im z ustawIm i przypisująca do nazwy funkcji.

Procedura wyświetlająca liczbę sprzężoną.

Funkcja obliczająca moduł.

Procedura obliczająca i wyświetlająca kąt .

Procedura dodająca 2 liczby zespolone.

Procedura odejmująca 2 liczbę zespolone.

Procedura mnożąca 2 liczby zespolone i wyświetlająca wynik.

Procedura drukująca liczbe zespoloną.

Procedura dzieląca 2 liczby rzeczywiste.

3. Wnioski

W prezentowanych przykładach pokazano niewielką część możliwości programowania obiektowego. Idea ta pozwala bardziej zbliżyć się do przestrzeni rozwiązywanego

problemu, gdyż operujemy pojęciami właściwymi temu problemowi. Możemy np.: stworzyć obiekt przechowujący inne obiekty, które przechowują informację

o studentach i wysłać do niego komunikat: „znajdź studenta o podanym nazwisku”. Po nabraniu pewnej wprawy kod programu obiektowego staje się bardziej czytelny

i łatwy do zrozumienia niż kod programu strukturalnego. Na następnych wykładach dowiemy się również, że programowanie obiektowe pozwala na znacznie lepsze

ponowne wykorzystanie kodu, niż programowanie strukturalne.


Wyszukiwarka

Podobne podstrony:
sprawozdanie programowanie lab20 fin
sprawozdanie programowanie lab4 fin
sprawozdanie programowanie lab5 fin
sprawozdanie programowanie lab3
sprawozdanie programowanie lab1
8 zalacznik 5 sprawozdawczosc w programach EUWT i EISiP
Sprawozdanie-aktywa,pasywa fin-RF-01
sprawozdanie programoweanie lab7 fin2
sprawozdanie programowanie lab2
sprawozdanie programowanie lab3 fin2
sprawozdanie programowanie lab9 fin2
sprawozdanie programowanie lab4
sprawozdanie programowanie lab8
Sprawozdanie z Programowania wsp¢ˆbie¾nego doc
Sprawozdanie ze znajomości programu symulacyjnego NF & S, metalurgia i odlewnictwo
Hubert Bielacki Sprawozdanie.2, ElektronikaITelekomunikacjaWAT, Semestr 1, Metodyka i technika progr
SPRAWOZDANIE I PRZYKŁAD PROGRAMU, SPRAOZDANIE STRONA TYTUŁOWA

więcej podobnych podstron