sprawozdanie programowanie lab20 fin


Politechnika Świętokrzyska w Kielcach Wydział Elektrotechniki,
Automatyki i Informatyki
Laboratorium Podstaw Programowania 2
Lab. nr 11
Kompozycja i dziedziczenie
Data wykonania Data oddania Ocena :
dwiczenia : sprawozdania :
02.06.2012 12.06.2012
1.Przemysław Wolski
1. Wstęp teoretyczny
Kompozycja i dziedziczenie sÄ… dwiema technikami z zakresu programowania
obiektowego pozwalającymi na wielokrotne wykorzystanie kodu. Dzięki nim
możemy
tworzyć nowe klasy na podstawie już istniejących. Zanim zostaną one opisane
należy przyjąć jakąś notację, która ułatwiłaby wyrażenie związków między klasami
zdefiniowanymi w programie. Taką notacją, niezależną od używanego języka
programowania jest język UML (ang. Unified Modeling Language). Wbrew nazwie nie
jest
to język programowania, ale graficzny sposób na przedstawienie zależności między
klasami. Język ten jest stosunkowo skomplikowany. W dalszej części wykładu
będziemy posługiwać się jego wersją okrojoną, niekoniecznie zgodną ze
standardem. Pojedyncza klasa w tym języku może być reprezentowana przez
prostokÄ…t
zawierający w górnej części nazwę klasy, a pozostała jego część jest wypełniona
nazwami metod publicznych stanowiących tzw. interfejs klasy. Mogą tam również
zostać
wymienione nazwy pól klasy, które są zadeklarowane jako publiczne.
2. Przebieg laboratorium.
Zadanie 1.
Utwórz klasę która będzie określać położenie punktu w trzech wymiarach (x,y,z). Zastosuj
mechanizm dziedziczenia. Wykorzystaj klasę Punkt (stworzoną na poprzednich zajęciach) jako
klasę bazową. Stwórz nowa klasę Punk3D, która będzie klasą potomną.
Klasa Punkt zawiera:
Pola:
x;
y;
Konstruktory:
·ð bezparametrowy, ustawiajÄ…cy wartość wszystkich pól na 1;
·ð dwuparametrowy, przyjmujÄ…cy dwie wartoÅ›ci typu int;
Metody:
·ð pobierzX;
·ð ustawX(int wspX);
·ð pobierzY;
·ð ustawY(int wspY);
·ð ustawXY(int wspX, int wspY);
·ð wyswietlWspolrzedne
;
Program lab20zad1; Program główny .
uses crt,LAB2,LAB4;
var
q:Punkt3d;
begin
clrscr;
q.inicjuj(1,2,4); Zainicjowanie liczb.
q.wyswietlWspolrzedne(q.pobierzX,q.pobierzY,q.pobierzZ); Wyświetlenie
readln; wpsółrzędnych.
end.
unit LAB2; Unit LAB2
interface
type
Punkt = object Zdefiniowanie obiektu.
x,y:integer;
procedure ustawX(wX:integer);
function pobierzX:integer;
procedure ustawY(wY:integer);
function pobierzY:integer;
procedure
wyswietlWspolrzedne(d,c:integer);
constructor inicjuj(j,k:integer);
end;
implementation Poczatek implementacji modułu.
procedure Punkt.ustawX(wX:integer); Procedura ustawiająca pobrana wartość
begin na x
x:=wX;
end;
function Punkt.pobierzX:integer; Funkcja pobierajÄ…ca x i ustawiajÄ…ca na
begin nazwÄ™ funkcji.
pobierzX:=x;
end;
procedure Punkt.ustawY(wY:integer); Procedura ustawiająca pobrana wartość
begin na y
y:=wY;
end;
function Punkt.pobierzY:integer; Funkcja pobierajÄ…ca y i ustawiajÄ…ca na
begin nazwÄ™ funkcji.
pobierzY:=y;
end;
procedure Procedura wyświetlająca.
Punkt.wyswietlWspolrzedne(d,c:integer);
begin
write('Wspolrzedne: {',d,',',c);
read;
end;
constructor Punkt.inicjuj(j,k:integer); Konstrukcja ustawiajÄ…ca konkretnÄ…
begin wartość na ustawX i ustawY.
ustawX(j);
ustawY(k);
end;
end.
unit LAB4; Moduł zmieniający punkt 2d na 3d
interface
uses crt,LAB2;
type
Punkt3d=object(Punkt) Definicja obiektu 3d.
private
z:integer;
public
function pobierzZ:integer;
procedure ustawZ(a:integer);
procedure
wyswietlWspolrzedne(d,c,f:integer);
constructor inicjuj(j,k,l:integer);
end;
implementation
constructor Punkt3d.inicjuj(j,k,l:integer); Konstruktor inicjujÄ…cy punkt 3d.
begin
inherited inicjuj(j,k);
ustawZ(l);
end;
function Punkt3d.pobierzZ:integer; Procedura ustawiajÄ…ca pobrana
begin wartość na z
pobierzZ:=z;
end;
procedure Punkt3d.ustawZ(a:integer); Funkcja pobierajÄ…ca z i ustawiajÄ…ca na
begin nazwÄ™ funkcji.
z:=a;
end;
procedure Procedura wyświetlająca.
Punkt3d.wyswietlWspolrzedne(d,c,f:integer);
begin
inherited wyswietlWspolrzedne(d,c);
write(',',z,'}');
end;
end.
Zadanie 2.
Utwórz klasę Pracownik. Zastosuj mechanizm dziedziczenia. Wykorzystaj klasę Pracownik
jako klasę bazową. Stwórz nowa klasę kierownik, która będzie klasą potomną.
Klasa Pracownik zawiera:
Pola:
Imie, Nazwisko, Pensja;
Konstruktory:
·ð bezparametrowy;
·ð trzyparametrowy.
Metody:
·ð pobierzImie;
·ð ustawImie;
·ð pobierzNazwisko;
·ð ustawnazwisko;
·ð ustawPensje;
·ð pobierzPensje;
·ð drukuj;
Klasa Kierownik posiada dodatkowo:
Pole:
Premia;
Metody:
·ð ustawPremi
e;
·ð pobierzPremie;
·ð drukuj
;
Program lab20zad2; Program główny.
uses crt,LAB5,LAB6;
var
q:Kierownik;
begin
clrscr;
q.inicjuj('Te0','Grafik',2000,500); Zainicjowanie konkretnych danych.
q.drukuj(q.pobierzImie,q.pobierzNazwisko,q.pob Wyświetlenie na ekran.
ierzPensje,q.pobierzPremie);
readln;
end.
Unit LAB5;
interface
uses crt;
type
Pracownik=object Zdefiniowanie obiektu Pracownik.
private
imie,nazwisko:string;
pensja:integer;
public
procedure ustawImie(i:string);
function pobierzImie:string;
procedure ustawNazwisko(n:string);
function pobierzNazwisko:string;
procedure ustawPensje(p:integer);
function pobierzPensje:integer;
procedure drukuj(x,y:string; z:integer);
constructor inicjuj(a,b:string; c:integer);
end;
implementation
constructor Pracownik.inicjuj(a,b:string; Konstruktor inicjujacy poszczególne pola.
c:integer);
begin
ustawImie(a);
ustawNazwisko(b);
ustawPensje(c);
end;
procedure Pracownik.ustawImie(i:string); Procedura ustawiająca pobrana wartość na
imie
begin
imie:=i;
end;
Funkcja pobierajÄ…ca imie i ustawiajÄ…ca na
function Pracownik.pobierzImie:string;
nazwÄ™ funkcji.
begin
pobierzImie:=imie;
end;
procedure Pracownik.ustawNazwisko(n:string); Procedura ustawiająca pobrana wartość na
nazwisko
begin
Nazwisko:=n;
end;
Funkcja pobierajÄ…ca nazwisko i ustawiajÄ…ca
function Pracownik.pobierzNazwisko:string;
na nazwÄ™ funkcji.
begin
pobierzNazwisko:=Nazwisko;
end;
procedure Pracownik.ustawPensje(p:integer);
Procedura ustawiająca pobrana wartość na
begin
pensja
Pensja:=p;
end;
function Pracownik.pobierzPensje:integer;
Funkcja pobierajÄ…ca pensja i ustawiajÄ…ca na
begin
nazwÄ™ funkcji.
pobierzPensje:=Pensja;
end;
procedure Pracownik.drukuj(x,y:string;
Wyświetlenie danych.
z:integer);
begin
writeln(x,' ',y,' zarabia: ',z);
end;
end.
unit LAB6;
interface
uses crt,LAB5;
type
Kierownik=object(Pracownik) Zdefiniowanie obiektu Kierownik, korzystajÄ…cego
private z modułu Pracownik.
Premia:integer;
public
function pobierzPremie:integer;
procedure ustawPremie(a:integer);
procedure drukuj(x,y:string;
z,d:integer);
constructor inicjuj(a,b:string;
c,d:integer);
end;
implementation
constructor Kierownik.inicjuj(a,b:string; Konstruktor inicjujący Poszczególne pola.
c,d:integer);
begin
inherited inicjuj(a,b,c);
ustawPremie(d);
end;
procedure Kierownik.ustawPremie(a:integer); Procedura ustawiająca pobrana wartość na
premia
begin
Premia:=a;
end;
Funkcja pobierajÄ…ca premia i ustawiajÄ…ca na
function Kierownik.pobierzPremie:integer;
nazwÄ™ funkcji.
begin
pobierzPremie:=Premia;
end;
Procedura drukujÄ…ca dane na ekranie.
procedure Kierownik.drukuj(x,y:string;
z,d:integer);
begin
inherited drukuj(x,y,z);
ZastÄ…pienie procedury drukuj + dodanie premia.
writeln('premia wynosi: ',d);
end;
end.
program lab11zad3;
Program główny.
uses crt,OSOB,CIEZ,TRAM;
var
a,b:string;
c,d,x:integer;
p:Osobowe;
q:Ciezarowe;
r:Tramwaj;
begin
clrscr;
writeln('Podaj marke: ');
Wczytanie marki.
readln(a);
writeln('Podaj numer rejestracyjny:
');
readln(b);
Wczytanie numeru rejestracyjnego.
writeln('Podaj rok produkcji: ');
readln(c);
MENU
writeln('Jaki pojazd dodajesz?');
writeln('1. samochod osobowy');
writeln('2. samochod ciezarowy');
writeln('3. tramwaj');
readln(x);
case x of
1: begin
writeln('Podaj moc w KM');
readln(d); Wczytanie mocy pojazdu.
clrscr;
p.ini(a,b,c,d);
p.drukuj(p.pobierzMarke,p.pobierzRejes
tracje,p.pobierzDate,p.pobierzMoc);
end;
2: begin
writeln('Podaj ladownosc: ');
readln(d);
Wczytanie ładowności.
clrscr;
q.ini(a,b,c,d);
q.drukuj(q.pobierzMarke,q.pobierzRejes
tracje,q.pobierzDate,q.pobierzLadownos
c);
end;
3: begin
writeln('Podaj ilosc miejsc: ');
Wczytanie ilosci miejsc.
readln(d);
clrscr;
r.ini(a,b,c,d);
r.drukuj(r.pobierzMarke,r.pobierzRejes
Wydrukowanie danych
tracje,r.pobierzDate,r.pobierzLiczbe);
end;
end;
repeat until keypressed;
end.
unit MAIN;
interface
type
Zdefiniowanie obiektu Pojazdy
Pojazdy = object
m,r:string;
da:integer;
procedure
ustawMarke(marka:string);
function pobierzMarke:string;
procedure
ustawRejestracje(rejestracja:strin
g);
function
pobierzRejestracje:string;
procedure ustawDate(data:integer);
function pobierzDate:integer;
procedure drukuj(a,b:string;
c:integer);
constructor
ini(a,b:string;c:integer);
end;
implementation
constructor
Pojazdy.ini(a,b:string;c:integer);
begin
ustawMarke(a);
ustawRejestracje(b);
ustawDate(c);
end;
procedure
Procedura ustawiająca pobrana wartość na m
Pojazdy.ustawMarke(marka:string);
begin
m:=marka;
end;
function
Funkcja pobierajÄ…ca m i ustawiajÄ…ca na nazwÄ™
Pojazdy.pobierzMarke:string;
funkcji.
begin
pobierzMarke:=m;
end;
procedure
Procedura ustawiająca pobrana wartość na r
Pojazdy.ustawRejestracje(rejestrac
ja:string);
begin
r:=rejestracja;
end;
Funkcja pobierajÄ…ca r i ustawiajÄ…ca na nazwÄ™
function
funkcji.
Pojazdy.pobierzRejestracje:string;
begin
pobierzRejestracje:=r;
end;
procedure
Pojazdy.ustawDate(data:integer);
Procedura ustawiająca pobrana wartość na da
begin
da:=data;
end;
function
Funkcja pobierajÄ…ca da i ustawiajÄ…ca na nazwÄ™
Pojazdy.pobierzDate:integer;
funkcji.
begin
pobierzDate:=da;
end;
procedure
Procedura drukujÄ…ca dane na ekranie.
Pojazdy.drukuj(a,b:string;c:intege
r);
begin
writeln('Dane pojazdu:');
writeln('Marka:
|',a);
writeln('Numer rejestracyjny:
|',b);
writeln('Rok produkcji:
|',c);
end;
end.
unit TRAM;
interface
uses
crt,MAIN;
type
Zdefiniowanie obiektu Tramwaj korzystajÄ…cego z
Tramwaj = object(Pojazdy)
i:integer;
modułu Pojazdy.
procedure
ustawLiczbe(liczba:integer);
function pobierzLiczbe:integer;
procedure drukuj(a,b:string;
c,d:integer);
constructor
ini(a,b:string;c,d:integer);
end;
implementation
constructor
Konstruktor inicjujÄ…cy dane.
Tramwaj.ini(a,b:string;c,d:integer
);
begin
inherited ini(a,b,c);
ustawLiczbe(d);
end;
procedure
Procedura ustawiająca pobrana wartość na i
Tramwaj.ustawLiczbe(liczba:integer
);
begin
i:=liczba;
end;
function
Funkcja pobierajÄ…ca i i ustawiajÄ…ca na nazwÄ™
Tramwaj.pobierzLiczbe:integer;
funkcji.
begin
pobierzLiczbe:=i;
end;
procedure
Tramwaj.drukuj(a,b:string;c,d:inte Procedura wyświetlająca dane.
ger);
begin
inherited drukuj(a,b,c);
writeln('Tramwaj
|');
write('Ilosc miejsc:
|',d);
end;
end.
unit SAMO;
interface
uses
crt,MAIN;
type
Samochody = object(Pojazdy)
Zdefiniowanie obiektu Samochody korzystajÄ…cego z
procedure drukuj(a,b:string;
modułu Pojazdy.
c:integer);
constructor
ini(a,b:string;c:integer);
end;
implementation
constructor
Samochody.ini(a,b:string;c:integer
Zainicjowanie danych.
);
begin
inherited ini(a,b,c);
end;
procedure
Samochody.drukuj(a,b:string;c:inte
Wyświetlenie na ekran.
ger);
begin
inherited drukuj(a,b,c);
write('Samochod');
end;
end.
unit OSOB;
interface
uses
crt,SAMO;
type
Zdefiniowanie obiektu Osobowe korzystajÄ…cego z
Osobowe = object(Samochody)
km:integer;
modułu Samochody.
procedure ustawMoc(moc:integer);
function pobierzMoc:integer;
procedure drukuj(a,b:string;
c,d:integer);
constructor
ini(a,b:string;c,d:integer);
end;
implementation
constructor
Osobowe.ini(a,b:string;c,d:integer
Zainicjowanie danych.
);
begin
inherited ini(a,b,c);
ustawMoc(d);
end;
procedure
Osobowe.ustawMoc(moc:integer);
Procedura ustawiająca pobrana wartość na km
begin
km:=moc;
end;
function
Osobowe.pobierzMoc:integer;
Funkcja pobierajÄ…ca km i ustawiajÄ…ca na nazwÄ™
begin
funkcji.
pobierzMoc:=km;
end;
procedure
Wyświetlenie danych na ekran.
Osobowe.drukuj(a,b:string;c,d:inte
ger);
begin
inherited drukuj(a,b,c);
write(' osobowy |');
writeln;
writeln('Moc:
|',d,' KM');
end;
end.
unit CIEZ;
interface
uses
crt,SAMO;
type
Zdefiniowanie obiektu Ciężarowe, korzystającego z
Ciezarowe = object(Samochody)
kg:integer;
modułu Samochody.
procedure
ustawLadownosc(ladownosc:integer);
function pobierzLadownosc:integer;
procedure drukuj(a,b:string;
c,d:integer);
constructor
ini(a,b:string;c,d:integer);
end;
implementation
constructor
Zainicjowanie danych.
Ciezarowe.ini(a,b:string;c,d:integ
er);
begin
inherited ini(a,b,c);
ustawLadownosc(d);
end;
procedure
Procedura ustawiająca pobrana wartość na kg
Ciezarowe.ustawLadownosc(ladownosc
:integer);
begin
kg:=ladownosc;
end;
Funkcja pobierajÄ…ca kg i ustawiajÄ…ca na nazwÄ™
function
funkcji.
Ciezarowe.pobierzLadownosc:integer
;
begin
pobierzLadownosc:=kg;
end;
procedure
Ciezarowe.drukuj(a,b:string;c,d:in
Wyświetlenie danych.
teger);
begin
inherited drukuj(a,b,c);
write(' ciezarowy |');
writeln;
writeln('Ladownosc :
|',d,' kg');
writeln;
end;
end.
3. Wnioski.
Dziedziczenie i kompozycja s bardzo elastycznymi i wydajnymi technikami
powtórnego wykorzystania kodu. W praktyce cz ciej stosuje si ą ęś ę kompozycję, niż
dziedzi-
czenie, natomiast w większych programach prawie zawsze obie te techniki są
stosowane równocześnie.


Wyszukiwarka

Podobne podstrony:
sprawozdanie programowanie lab3 fin
sprawozdanie programowanie lab5 fin
sprawozdanie programowanie lab7 fin2
sprawozdanie programowanie lab3 fin2
sprawozdanie programowanie lab9 fin2
8 zalacznik 5 sprawozdawczosc w programach EUWT i EISiP
zmiany w sprawozdaniach fin
UPN program sprawozdanie
Sprawozdanie pracy z programem Geomedia
Dyrektywa w sprawie ustawowych badań rocznych sprawozdań fin i skonsolid sprawozd fin
sprawozdanie z realizacji programu 1007
zestawy cwiczen przygotowane na podstawie programu Mistrz Klawia 6
Międzynarodowy Program Badań nad Zachowaniami Samobójczymi
sprawozdanie felixa2

więcej podobnych podstron