sprawozdanie programowanie lab20 fin

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

Data wykonania ćwiczenia :

02.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;

uses crt,LAB2,LAB4;

var

q:Punkt3d;

begin

clrscr;

q.inicjuj(1,2,4);

q.wyswietlWspolrzedne(q.pobierzX,q.pobierzY,q.pobierzZ);

readln;

end.

Program główny .

Zainicjowanie liczb.

Wyświetlenie wpsółrzędnych.

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);

constructor inicjuj(j,k: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

write('Wspolrzedne: {',d,',',c);

read;

end;

constructor Punkt.inicjuj(j,k:integer);

begin

ustawX(j);

ustawY(k);

end;

end.

Unit LAB2

Zdefiniowanie obiektu.

Poczatek implementacji modułu.

Procedura ustawiająca pobrana wartość na x

Funkcja pobierająca x i ustawiająca na nazwę funkcji.

Procedura ustawiająca pobrana wartość na y

Funkcja pobierająca y i ustawiająca na nazwę funkcji.

Procedura wyświetlająca.

Konstrukcja ustawiająca konkretną wartość na ustawX i ustawY.

unit LAB4;

interface

uses crt,LAB2;

type

Punkt3d=object(Punkt)

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);

begin

inherited inicjuj(j,k);

ustawZ(l);

end;

function Punkt3d.pobierzZ:integer;

begin

pobierzZ:=z;

end;

procedure Punkt3d.ustawZ(a:integer);

begin

z:=a;

end;

procedure Punkt3d.wyswietlWspolrzedne(d,c,f:integer);

begin

inherited wyswietlWspolrzedne(d,c);

write(',',z,'}');

end;

end.

Moduł zmieniający punkt 2d na 3d

Definicja obiektu 3d.

Konstruktor inicjujący punkt 3d.

Procedura ustawiająca pobrana wartość na z

Funkcja pobierająca z i ustawiająca na nazwę funkcji.

Procedura wyświetlająca.

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:

 ustawPremie;

 pobierzPremie;

 drukuj;

Program lab20zad2;

uses crt,LAB5,LAB6;

var

q:Kierownik;

begin

clrscr;

q.inicjuj('Te0','Grafik',2000,500);

q.drukuj(q.pobierzImie,q.pobierzNazwisko,q.pobierzPensje,q.pobierzPremie);

readln;

end.

Program główny.

Zainicjowanie konkretnych danych.

Wyświetlenie na ekran.

Unit LAB5;

interface

uses crt;

type

Pracownik=object

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; c:integer);

begin

ustawImie(a);

ustawNazwisko(b);

ustawPensje(c);

end;

procedure Pracownik.ustawImie(i:string);

begin

imie:=i;

end;

function Pracownik.pobierzImie:string;

begin

pobierzImie:=imie;

end;

procedure Pracownik.ustawNazwisko(n:string);

begin

Nazwisko:=n;

end;

function Pracownik.pobierzNazwisko:string;

begin

pobierzNazwisko:=Nazwisko;

end;

procedure Pracownik.ustawPensje(p:integer);

begin

Pensja:=p;

end;

function Pracownik.pobierzPensje:integer;

begin

pobierzPensje:=Pensja;

end;

procedure Pracownik.drukuj(x,y:string; z:integer);

begin

writeln(x,' ',y,' zarabia: ',z);

end;

end.

Zdefiniowanie obiektu Pracownik.

Konstruktor inicjujacy poszczególne pola.

Procedura ustawiająca pobrana wartość na imie

Funkcja pobierająca imie i ustawiająca na nazwę funkcji.

Procedura ustawiająca pobrana wartość na nazwisko

Funkcja pobierająca nazwisko i ustawiająca na nazwę funkcji.

Procedura ustawiająca pobrana wartość na pensja

Funkcja pobierająca pensja i ustawiająca na nazwę funkcji.

Wyświetlenie danych.

unit LAB6;

interface

uses crt,LAB5;

type

Kierownik=object(Pracownik)

private

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; c,d:integer);

begin

inherited inicjuj(a,b,c);

ustawPremie(d);

end;

procedure Kierownik.ustawPremie(a:integer);

begin

Premia:=a;

end;

function Kierownik.pobierzPremie:integer;

begin

pobierzPremie:=Premia;

end;

procedure Kierownik.drukuj(x,y:string; z,d:integer);

begin

inherited drukuj(x,y,z);

writeln('premia wynosi: ',d);

end;

end.

Zdefiniowanie obiektu Kierownik, korzystającego z modułu Pracownik.

Konstruktor inicjujący Poszczególne pola.

Procedura ustawiająca pobrana wartość na premia

Funkcja pobierająca premia i ustawiająca na nazwę funkcji.

Procedura drukująca dane na ekranie.

Zastąpienie procedury drukuj + dodanie premia.

program lab11zad3;

uses crt,OSOB,CIEZ,TRAM;

var

a,b:string;

c,d,x:integer;

p:Osobowe;

q:Ciezarowe;

r:Tramwaj;

begin

clrscr;

writeln('Podaj marke: ');

readln(a);

writeln('Podaj numer rejestracyjny: ');

readln(b);

writeln('Podaj rok produkcji: ');

readln(c);

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);

clrscr;

p.ini(a,b,c,d);

p.drukuj(p.pobierzMarke,p.pobierzRejestracje,p.pobierzDate,p.pobierzMoc);

end;

2: begin

writeln('Podaj ladownosc: ');

readln(d);

clrscr;

q.ini(a,b,c,d);

q.drukuj(q.pobierzMarke,q.pobierzRejestracje,q.pobierzDate,q.pobierzLadownosc);

end;

3: begin

writeln('Podaj ilosc miejsc: ');

readln(d);

clrscr;

r.ini(a,b,c,d);

r.drukuj(r.pobierzMarke,r.pobierzRejestracje,r.pobierzDate,r.pobierzLiczbe);

end;

end;

repeat until keypressed;

end.

Program główny.

Wczytanie marki.

Wczytanie numeru rejestracyjnego.

MENU

Wczytanie mocy pojazdu.

Wczytanie ładowności.

Wczytanie ilosci miejsc.

Wydrukowanie danych

unit MAIN;

interface

type

Pojazdy = object

m,r:string;

da:integer;

procedure ustawMarke(marka:string);

function pobierzMarke:string;

procedure ustawRejestracje(rejestracja:string);

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 Pojazdy.ustawMarke(marka:string);

begin

m:=marka;

end;

function Pojazdy.pobierzMarke:string;

begin

pobierzMarke:=m;

end;

procedure Pojazdy.ustawRejestracje(rejestracja:string);

begin

r:=rejestracja;

end;

function Pojazdy.pobierzRejestracje:string;

begin

pobierzRejestracje:=r;

end;

procedure Pojazdy.ustawDate(data:integer);

begin

da:=data;

end;

function Pojazdy.pobierzDate:integer;

begin

pobierzDate:=da;

end;

procedure Pojazdy.drukuj(a,b:string;c:integer);

begin

writeln('Dane pojazdu:');

writeln('Marka: |',a);

writeln('Numer rejestracyjny: |',b);

writeln('Rok produkcji: |',c);

end;

end.

Zdefiniowanie obiektu Pojazdy

Procedura ustawiająca pobrana wartość na m

Funkcja pobierająca m i ustawiająca na nazwę funkcji.

Procedura ustawiająca pobrana wartość na r

Funkcja pobierająca r i ustawiająca na nazwę funkcji.

Procedura ustawiająca pobrana wartość na da

Funkcja pobierająca da i ustawiająca na nazwę funkcji.

Procedura drukująca dane na ekranie.

unit TRAM;

interface

uses

crt,MAIN;

type

Tramwaj = object(Pojazdy)

i:integer;

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 Tramwaj.ini(a,b:string;c,d:integer);

begin

inherited ini(a,b,c);

ustawLiczbe(d);

end;

procedure Tramwaj.ustawLiczbe(liczba:integer);

begin

i:=liczba;

end;

function Tramwaj.pobierzLiczbe:integer;

begin

pobierzLiczbe:=i;

end;

procedure Tramwaj.drukuj(a,b:string;c,d:integer);

begin

inherited drukuj(a,b,c);

writeln('Tramwaj |');

write('Ilosc miejsc: |',d);

end;

end.

Zdefiniowanie obiektu Tramwaj korzystającego z modułu Pojazdy.

Konstruktor inicjujący dane.

Procedura ustawiająca pobrana wartość na i

Funkcja pobierająca i i ustawiająca na nazwę funkcji.

Procedura wyświetlająca dane.

unit SAMO;

interface

uses

crt,MAIN;

type

Samochody = object(Pojazdy)

procedure drukuj(a,b:string; c:integer);

constructor ini(a,b:string;c:integer);

end;

implementation

constructor Samochody.ini(a,b:string;c:integer);

begin

inherited ini(a,b,c);

end;

procedure Samochody.drukuj(a,b:string;c:integer);

begin

inherited drukuj(a,b,c);

write('Samochod');

end;

end.

Zdefiniowanie obiektu Samochody korzystającego z modułu Pojazdy.

Zainicjowanie danych.

Wyświetlenie na ekran.

unit OSOB;

interface

uses

crt,SAMO;

type

Osobowe = object(Samochody)

km:integer;

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);

begin

inherited ini(a,b,c);

ustawMoc(d);

end;

procedure Osobowe.ustawMoc(moc:integer);

begin

km:=moc;

end;

function Osobowe.pobierzMoc:integer;

begin

pobierzMoc:=km;

end;

procedure Osobowe.drukuj(a,b:string;c,d:integer);

begin

inherited drukuj(a,b,c);

write(' osobowy |');

writeln;

writeln('Moc: |',d,' KM');

end;

end.

Zdefiniowanie obiektu Osobowe korzystającego z modułu Samochody.

Zainicjowanie danych.

Procedura ustawiająca pobrana wartość na km

Funkcja pobierająca km i ustawiająca na nazwę funkcji.

Wyświetlenie danych na ekran.

unit CIEZ;

interface

uses

crt,SAMO;

type

Ciezarowe = object(Samochody)

kg:integer;

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 Ciezarowe.ini(a,b:string;c,d:integer);

begin

inherited ini(a,b,c);

ustawLadownosc(d);

end;

procedure Ciezarowe.ustawLadownosc(ladownosc:integer);

begin

kg:=ladownosc;

end;

function Ciezarowe.pobierzLadownosc:integer;

begin

pobierzLadownosc:=kg;

end;

procedure Ciezarowe.drukuj(a,b:string;c,d:integer);

begin

inherited drukuj(a,b,c);

write(' ciezarowy |');

writeln;

writeln('Ladownosc : |',d,' kg');

writeln;

end;

end.

Zdefiniowanie obiektu Ciężarowe, korzystającego z modułu Samochody.

Zainicjowanie danych.

Procedura ustawiająca pobrana wartość na kg

Funkcja pobierająca kg i ustawiająca na nazwę funkcji.

Wyświetlenie danych.

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 lab4 fin
sprawozdanie programowanie lab5 fin
sprawozdanie programowanie lab11 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