09 Klasy i modulyid 7952 Nieznany

background image

Wstęp

do programowania

Wykład 9 – klasy, moduły

background image

Moduły

Napisane funkcje lub procedury przez np.. Użytkownika mogą być połączone

w jeden moduł, z którego można korzystać w wielu aplikacjach.

Reguły tworzenia modułów

Nazwa pliku, w którym znajduje się moduł powinna być taka sama jak

nazwa modułu.

• Moduł składa się z części opisowej, implementacyjnej i inicjującej. Część

inicjująca musi się kończyć kropką.

• Stosowanie modułów powoduje, że właściwe programy są znacznie

krótsze, bardziej przejrzyste i czytelne.

Dzięki temu, że moduły przechowywane są w postaci skompilowanej w

trakcie kompilacji programu definicje zawarte w modułach są

do programu wynikowego dołączane a zatem kompilacja programu

przebiega szybciej. (rozszerzenie .pas w delphi)

background image

Moduły

Fragment modułu umieszczony pomiędzy słowami interface i

implementation jest częścią publiczną, a pomiędzy słowami

implementation oraz end . jest tzw. częścią prywatną modułu,

W programach, w których zadeklarowano chęć korzystania z modułu

dostępne są tylko definicje umieszczone w części publicznej;

żaden typ, zmienna lub stała umieszczona w części prywatnej nie

jest dostępna w programie.

Wszystkie definicje funkcji i procedur, niezależnie od tego czy mają

być dostępne w programie czy nie muszą być umieszczone

w części prywatnej. Procedura lub funkcja staje się publiczna gdy jej

nagłówek zostanie umieszczony w części publicznej modułu.

background image

Moduły

Liczba modułów, z których może składać się program jest praktycznie

nieograniczona.

• Jeśli jeden moduł korzysta z innego to istotna jest kolejność nazw na

liście deklarowanych modułów. Moduł wykorzystywany powinien

znajdować się przed wykorzystującym.

Nazwy występujące w programie są nadrzędne w stosunku do tych

występujących w modułach. Przesłonięte identyfikatory z modułu

są dostępne w programie jeśli są poprzedzone nazwą modułu i

kropką.

background image

Moduły

Unit Unit1

Interface

Implementation

End.

Część

pubiczna

Część

prywatna

Dołączanie modułów w programie za
pomocą słowa kluczowego uses

program modul_dpr;

uses

SysUtils, System

Unit1 in 'Unit1.pas';

background image

Moduły -

użyj aplikacji

units

unit modul1;

interface

const n = 2; Type Tab=array[1..N,1..N] of
Integer;

procedure gener(var T:Tab );

procedure wypisz( T:Tab );

Implementation

procedure gener( var T:Tab);

var i,j:byte;

Begin for i:=1 to N do

for J:=1 to N do T[i,j]:=random(10);

end;

procedure wypisz(T: Tab );

var i,j:byte;

Begin

for i:=1 to N do

for j:=1 to N do

if j< N then write (T[i,j]:4,' ') else writeln

(T[i,j]:4)

end; end.

Program pr_modul1;

uses

SysUtils,

modul in 'modul1.pas';

var a: Tab;

Begin

gener(A );

wypisz(A);

readln;

end.

background image

Moduły

Projekt w Lazarusie składać się może formularzy, modułów.

Projekt w Delphi składa się z plików:

 plik główny projektu (lpr)

plik zawierający informacje o formularzach i modułach aplikacji zawiera

kod inicjujący

 pliki modułów (pas) - kody źródłowe modułów

 pliki formularzowe (lfm)

 plik zasobów (lrs)

 plik informacyjny (lpi)

background image

Klasy

Klasa jest złożoną strukturą danych rozbudowaną o funkcje składowe.
Obiektem nazywamy konkretny egzemplarz danej klasy.
W skład klasy wchodzą: dane (zmienne) składowe, funkcje składowe

(metody), w tym konstruktory i destruktory.
Klasę deklaruje się przy użyciu słowa kluczowego class, np:

type Tnazwa_Klasy=class … end;
W dobrym stylu jest nadawanie klasie nazwy z dużej litery T.
Elementy klasy są podzielone na sekcje: publiczną i prywatną,

chronioną.
Elementy te mogą być deklarowane w dowolnej liczbie występujących

po sobie sekcji wydzielonych przez etykiety public lub private
Elementy klasy są domyślnie prywatne. Metod i zmiennych publicznych

klasy można używać wszędzie w programie, natomiast do metod i

zmiennych prywatnych dostęp mają tylko inne metody klasy.
Klasa powinna być abstrakcyjnym typem danych, czyli takim, który raz

zaprojektowany może być używany przez innych programistów bez

konieczności wgłębiania się w jego mechanizm.

background image

Klasy

Sekcja publiczna deklaracji klasy nazywana jest interfejsem klasy. zawarte

w niej metody wraz opisami ich parametrów, działanie i format wyniku

powinny dawać programiście minimum informacji na temat klasy
Według zasady abstrakcyjności danych, wszystkie dane składowe klasy

powinny znajdować się w sekcji prywatnej.
W sekcji publicznej należy umieszczać metody operujące na danych

prywatnych.
Jeśli metoda publiczna wykonuje wiele obliczeń lub pewne z nich

wykonywane są przez wiele metod publicznych, to można je wyodrębnić w

postaci osobnej metody prywatnej. Są one wtedy wyłącznie na użytek

implementacji klasy.
Implementacja klasy powinna być zaprojektowana przez programistę w

sposób, który daje mu możliwość rozbudowania i udoskonalania działania

funkcji jej składowych, bez wprowadzania jakichkolwiek zmian w interfejsie.
Dostęp do danych i funkcji składowych obiektu uzyskujemy przez użycie

operatora dostępu: ‘.’,

background image

Klasy

Klasa – jest wzorcem czyli typem dla swoich zmiennych, czyli

obiektów

Obiekt – jest zmienną swojej klasy

Programowanie obiektowe - programowanie, w którym klasy

stanowią najważniejszą część w konstrukcji programu.

Podstawowe własności programowania obiektowego:
- dziedziczenie
- hermetyzacja
- polimorfizm
- rozszerzalność

background image

Klasy

Dziedziczenie – jest własnością umożliwiającą klasie pochodnej uzyskanie

pól i metod swoich klas rodzicielskich,

• Jest możliwością tworzenia klas jako potomnych od klas rodzicielskich.
• Klasy potomne dziedziczą charakterystyki i działania klasy rodzic.
• Klasy pochodne – definiowane własności i operacje oraz mogą zmieniać

operacje odziedziczone.

Dziedziczenie

Budowa jednej klasy na bazie drugiej, przez dodawanie/przesłanianie jej

składowych:

background image

Klasy

Hermetyzacja - własność, która pozwala na łączenie danych z metodami w

obrębie obiektu; zwana inaczej Enkapsulacją.

Polimorfizm - własność dzielenia pojedynczego działania i nazwy działania

poprzez hierarchię obiektową w sposób właściwy dla każdego obiektu w
tej hierarchii.

Polimorfizm – pozwala każdej klasie na posiadanie własnych potrzeb,
metody te zapewniają jednolitą odpowiedź na komunikaty dochodzące do
żądanych klas w hierarchii, umożliwia obiektom generowania własnych
odpowiedzi na podobne komunikaty.

Rozszerzalność - własność pozwalająca rozszerzać i uaktualniać moduły już

skompilowane

background image

Klasy

Sekcje klasy

public (publiczne) – definiuje pola i metody, które są dostępne z dowolnego
miejsca programu oraz z modułu, w którym zostały zdefiniowane

private (prywatne) – definiuje pola i metody klasy, które są niedostępne spoza
modułu (pliku kodu źródłowego), w którym zdefiniowano klasę

protected (chronione) – definiuje pola i metody klasy, które są widoczne tylko
dla danej klasy i jej klas pochodnych (wykorzystywane w dziedziczeniu)

type

TFigura = class
private

bok: byte;
podstawa: 1..100;
procedure wypisz;

protected

kat: integer;
ile_pr: 0..2;
function pole(a,b:byte): Integer;

public

nazwa :string
procedure init;
procedure free;

end;

sekcja prywatna

sekcja chroniona

sekcja publiczna

background image

program PR_KONSTR1;

type

TProstokat = class

a, b :Integer; //wymiary prostokata
function obwod :Integer;
function pole:Integer;
end;

function TProstokat.obwod:Integer;

begin Result := (a+b)*2; end;

function TProstokat.pole:Integer;

begin Result := a*b; end;

Var Pro1, Pro2: TProstokat;
Begin

Pro1:= Tprostokat.Create;

Pro1.a := 4; Pro1.b := 2;

// pro2.a:=10; pro2.b:=20; // bład! -Brak create

writeln('obwod= ',Pro1.obwod);

writeln('Pole = ',Pro1.pole);

//writeln('Pole 2= ',Pro2.pole);

Pro1.Free;

readln; end.

Klas – to pola i metody –

przykład cd. W1.15XII

background image

program PrKONSTR2;

type

TProstokat = class

a, b :Integer; //wymiary prostok
function obwod :Integer;
function pole:Integer;
end;

function TProstokat.obwod:Integer;

begin Result := (a+b)*2; end;

function TProstokat.pole:Integer;

begin Result := a*b; end;

type

Trojkat = class

a, b,c :Integer; //wymiary
function obwod :Integer;
function pole:Integer;
end;

function Trojkat.obwod:Integer;

begin Result := (a+b+c); end;

function Trojkat.pole:Integer;

begin Result := a*(b+c) div 2; end;

Var Pro1 :TProstokat;

Klas – to pola i metody -

przykład

Var Pro1 :TProstokat;

tro1:Trojkat;

Pro1:=TProstokat.Create;

//obowiazkowe

Pro1.a := 5;
Pro1.b := 7;

writeln('obwod pr= ',Pro1.obwod);
writeln('Pole pr= ',Pro1.pole);

readln;

Tro1:=Trojkat.Create;

tro1.a := 2;
tro1.b := 3;
tro1.c := 4;

writeln('obwod tr= ',tro1.obwod);
writeln('Pole tr= ',tro1.pole);

Pro1.Free; //obowiazkowe

Tro1.Free; //obowiazkowe

readln; end.

background image

program PrKonstr3;

type

TProstokat = class

a :Integer; //wymiary prostok
procedure ustaw(_d:integer);
function wypisz:integer;

private

d: integer;

protected

b: integer;
public
c:integer;
end;
procedure TProstokat.ustaw(_d:integer);
begin
d:=_d;
end;

function TProstokat.wypisz:integer;

begin

Result:=d;

end;

Var Pro1 :TProstokat;

Klasa – dostęp pól klasy

Var Pro1 :TProstokat;
begin

Pro1:=Tprostokat.Create;

Pro1.a := 4; Pro1.b := 2;
Pro1.c := 50;
//Pro1.d := 1; //w module mozna

writeln('a= ',Pro1.a);
writeln('b = ',Pro1.b);
writeln('c = ',Pro1.c);
Pro1.ustaw(100);
writeln('d=',Pro1.Wypisz);
readln;

Pro1.Free
end.

background image

Klasy –

konstruktor, destruktor

konstruktor Create tworzy obiekt (przydziela wymaganą
pamięć)

destruktor Free zwalnia przydzieloną pamięć

klasa może zawierać więcej niż jeden konstruktor, a powinna
zawierać jeden destruktor

konstruktor powinien być wywołany jako pierwsza metoda dla
nowego obiektu

wywołaniu destruktora kończy pracę z obiektem, aby
ponownie korzystać z obiektu należy wywołać konstruktor

background image

Klasy –

konstruktor, destruktor

Użycie konstruktora Create jest obowiązkowe dla każdego

egzemplarza klasy (przydziela wymaganą pamięć)

Np.. TABC=class..

var ob1 : TABC

ob1:=TABC.Create;

Użycie destruktor Free jest obowiązkowe dla każdego

Egzemplarza klasy (zwalnia przydzieloną pamięć)

Np.. ob1.Free;

background image

Klasy –

konstruktor, destruktor

program Pr_Constructor4;

Type TProst=class

x,y: integer ;
a,b :integer; {bok}
constructor Create;
destructor Free;
function pole:longint;

end;

constructor TProst.Create;

begin Inherited Create;

a:=20; b:=4; end;

destructor Tprost.Free;
begin Inherited Free; {koniec pracy z TKwadrat} end;
function TProst.pole:longint;
begin Result:= a * b; end;

var Pkat :TProst;

BEGIN

Pkat:=Tprost.Create;

writeln('Pole prostokata: ', Pkat.pole);

Pkat.a:=100;

writeln('Pole prostokata: ', Pkat.pole);

Pkat.Free;

readln; END.

background image

Klasy –

konstruktor, destruktor

program pr_konstruktor5; {constructor i destructor}

Type TProst=class

a,b :integer; {bok}
constructor Create(_a,_b :integer);
destructor Destroy;
function pole:longint;

end;

constructor TProst.Create(_a, _b:Integer);
begin Inherited Create; //obowiazowe

a:=_a;
b:=_b;
writeln('Konstruktor TProst'); end;

destructor TProst.Destroy;
begin

writeln('Destruktor - Koniec pracy z TProst');

Inherited Destroy; end;

function TProst.pole:longint;
begin pole:= a * b; end;

var P1 ,p2:TProst;

BEGIN

P1:= Tprost.Create(20,?);
p2:= Create(4,7);
writeln(' Pole prostokata : ', P1.pole);
P1.Destroy; //Pkat.Free;
p2.Destroy;
readln; END.

background image

Klasy –

konstruktor, destruktor

procedure TFig.wypisz;
Begin writeln( 'bok = ', bok^);
end;

function Tfig.pole: Integer;
begin

Result:=bok^*bok^;
end;

var Kwadrat: TFig;
begin

Kwadrat := TFig.Create( 5 );

Kwadrat.wypisz;
Writeln(Kwadrat.pole)

Kwadrat.Destroy;

end.

program PrKonstr6

uses SysUtils;

type

TFig = class

bok: ^byte;
constructor Create(x:byte); overload;
constructor Create; overload;
destructor Free;
procedure wypisz;
function pole: Integer;

end;

constructor TFig.Create;
begin New( bok ); end;
constructor TFig.Create( x:Byte );
begin

Create;

bok^ := x;

end;
destructor TFig.Free;
begin

Dispose( bok );

end;

procedure TFig.wypisz;

background image

Typy konstruktorów

Program konstruktory;
{}
type

TPot = class

private

x, y: Integer;

public

constructor Create; overload;

//domyślny

constructor Create( dx, dy: Integer );

overload;

//zwykły

constructor Create( const dxy: TPot );

overload;

//kopiujący

end;

Jeżeli nie zdefiniujemy żadnego
konstruktora, kompilator wykorzysta
konstruktor klasy TObject

-wyróżniamy trzy rodzaje
konstruktorów:
a) domyślny (bez parametrów)
b) zwykły (z parametrami, może być
wiele takich konstruktorów)

c) kopiujący

Instrukcja przypisania tylko nazwę i
adres obiektu.

Jeśli zadeklarujemy jakikolwiek

konstruktor pobierający parametry,

musimy także zadeklarować

konstruktor domyślny

(bezparametrowy).

Przy definicji konstruktora

domyślnego pożądane jest

inicjalizowanie danych.

background image

Klasy –

konstruktory

Program PrKonstr7;

type

TPot = class

private

x, y: Integer;

public

constructor Create; overload;
constructor Create( dx, dy: Integer );

overload;

constructor Create( const DK: TPot );

overload;

end;

constructor TPot.Create;
Begin inherited Create;

x := 1; y := 0; end;

constructor TPot.Create(dx, dy: Integer);
Begin inherited Create;

x := dx; y := dy; end;

constructor TPot.Create(const DK: TPot);
Begin inherited Create;

x := DK.x; y := DK.y; end;

var a, b, c, d : TPot;
begin

a := TPot.Create;
b := TPot.Create( 7,13 );
c := TPot.Create( b );
//d := TPot.Create;
d:=b; //od wskaźnika
writeln(' a: ',a.x,' ',a.y);

writeln(' b: ',b.x,' ',b.y);
writeln(' c ',c.x,' ‘,c.y);
writeln(' d ',d.x,' ',d.y);

a.Free;
b.Free;
c.Free;
d.Free; //ten sam co b bo d=b

Readln

end;.


Wyszukiwarka

Podobne podstrony:
IS wyklad 14 15 01 09 MDW id 22 Nieznany
ei 2005 09 s004 id 154186 Nieznany
karta pracy klasy trzeciej nr11 Nieznany
09 Dobieranie materialow odziez Nieznany (2)
PIF2 2007 Wykl 09 Dzienne id 35 Nieznany
09 rany i krwawieniaid 7993 Nieznany (2)
09 pfsc sas gido3vwa6mgy2a3eiib Nieznany (2)
09 Rozroznianie stylow muzyczny Nieznany (2)
cennik 09 2013 id 109720 Nieznany
JAVA 09 klasy i obiekty(2)
09 15 id 53452 Nieznany (2)
09 Karty umiejetnosci pierwszak Nieznany
09 wspolczesne instalacje miesz Nieznany
09 uklad kierowniczy 5MCOQGXUO3 Nieznany (2)
09 Aparat trojosiowy instrukcja Nieznany (2)
Homines2011 09 Walkowiak id 205 Nieznany
09 Utlenianie 2005id 8028 Nieznany (2)

więcej podobnych podstron