Zapis programu z wykorzystaniem modułu (Podstawy Delphi 2.1, 2.2, 2.3 str11 )

Podobne dokumenty
Programowanie obiektowe w Pascalu

Programowanie modułowe

Podstawy programowania. Wykład PASCAL. Wstęp do programowania obiektowego. dr Artur Bartoszewski - Podstawy programowania, sem.

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Programowanie modułowe

Procedury i funkcje - powtórzenie i uzupełnienia. Przykład funkcji potęgowanie przy wykładniku naturalnym

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Tworzenie własnych komponentów

Dziedziczenie jednobazowe, poliformizm

Programowanie obiektowe

Zaawansowane programowanie w języku C++ Klasy w C++

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Wykład 8: klasy cz. 4

PODSTAWY PROGRAMOWANIA

Programowanie obiektowe

Programowanie obiektowe

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Wykład 4: Klasy i Metody

Wykład 5: Klasy cz. 3

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

Język programowania PASCAL

Programowanie 2. Język C++. Wykład 9.

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Delphi podstawy programowania. Środowisko Delphi

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 12

Dziedziczenie. Ogólna postać dziedziczenia klas:

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Ada-95. Dariusz Wawrzyniak

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Podstawy Programowania semestr drugi. Wykład czternasty

Kurs WWW. Paweł Rajba.

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Oracle PL/SQL. Paweł Rajba.

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

10. Programowanie obiektowe w PHP5

Podstawy Programowania 2

Programowanie obiektowe

Dziedziczenie. dr Jarosław Skaruz

PODSTAWY PROGRAMOWANIA

Rozdział 4 KLASY, OBIEKTY, METODY

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

TEMAT : KLASY DZIEDZICZENIE

Programowanie 2. Język C++. Wykład 3.

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Definicje klas i obiektów. Tomasz Borzyszkowski

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Język programowania. Andrzej Bobyk

Temat: Podstawy języka Object Pascal

Delphi Laboratorium 3

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Przypomnienie o klasach i obiektach

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Wykład 5 Okna MDI i SDI, dziedziczenie

Laboratorium 1 - Programowanie proceduralne i obiektowe

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie w Internecie. Java

Programowanie obiektowe

Szablony klas, zastosowanie szablonów w programach

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie, część I

OBIEKTY PHP. G. Panuś

Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5. Ćwiczenie 5 Aplikacja wielo-okienkowa

ALGORYTMY I STRUKTURY DANYCH

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Programowanie obiektowe

Do czego służą klasy?

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

PODSTAWOWE ZASADY PROGRAMOWANIA OBIEKTOWEGO NA BAZIE PAKIETU ROOT

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Wstęp do programowania obiektowego. Wykład 2

Informatyka II Laboratorium 3 : Programowania obiektowe C++ - dziedziczenie

Klasy abstrakcyjne, interfejsy i polimorfizm

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy KONSTRUKTORY

Klasy abstrakcyjne i interfejsy

Programowanie obiektowe

Kompozycja i dziedziczenie klas

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Enkapsulacja, dziedziczenie, polimorfizm

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Materiały do zajęć VII

Wstęp do Programowania 2

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

KLASY cz4. Dorota Pylak. destruktory składowe statyczne przeciążanie operatorów. wskaźniki

Transkrypt:

Przypomnienie dziedziczenie obiektów Przykład (p6) Zapis programu z wykorzystaniem modułu (Podstawy Delphi 2.1, 2.2, 2.3 str11 ) Przykład (p7) przypomnienie zapis z wykorzystaniem rekordu W pliku projektu (głównym) - p1.dpr: uses modult; var t: Ttrojkat; writeln('podaj dl bokow trojkata'); readln(t.a, t.b, t.c); writeln('pole=', pole(t)); //writeln ('Dodatkowo obliczenie obwodu: ', obwod(t)); // W pliku modułu - modult.pas: unit modult; type Ttrojkat= record function pole(t: Ttrojkat): real; function obwod(t: Ttrojkat): real; obwod:=t.a+t.b+t.c; function pole(t:ttrojkat):real; var p:real; p:=obwod(t)/2; pole:=sqrt(p*(p-t.a)*(p-t.b)*(p-t.c)); Część interfejsowa zawiera elementy widoczne w pliku głównym. Włączenie w tym pliku instrukcji: writeln ('Dodatkowo obliczenie obwodu: ', obwod(t)); nie powiedzie się procedura obwod dostępna tylko lokalnie w module. 1

Zmiana tego ograniczenia w drodze dopisania zapowiedzi (nagłówka) procedury w sekcji. Sekcja w nowej postaci: type Ttrojkat= record function pole(t: Ttrojkat): real; function obwod(t: Ttrojkat): real; Przykład (p8) - zapis obiektowy Plik główny prawie identyczny: uses modult; var t: Ttrojkat; writeln('podaj dl bokow trojkata'); readln(t.a, t.b, t.c); writeln('pole=', t.pole); end Z uwagi na wykorzystanie obiektu wywołanie funkcji obliczającej pole jest postaci: t.pole; Plik modułu: unit modult; type Ttrojkat= object function obwod:real; function pole:real; function Ttrojkat.obwod:real; obwod:=a+b+c; function Ttrojkat.pole:real; var p:real; p:=obwod/2; pole:=sqrt(p*(p-a)*(p-b)*(p-c)); 2

Przy deklarowaniu obiektów w module obowiązuje zasada: w części interfejsowej tylko opis typu obiektowego rozpisanie metod w części. W powyŝszym przykładzie cały obiekt jest dostępny na zewnątrz (np. w pliku głównym). Np. moŝna dodać wywołanie metody obwod: writeln(obwod=', t.obwod); Wynika to z ogólnej zasady Ŝe wszystko to co zadeklarowano w części jest widoczne. JeŜeli zachodzi potrzeba ukrycia pewnych szczegółów implementacji obiektu naleŝy dodatkowo w zapisie deklaracji obiektu dodać dyrektywę private. Opis dyrektyw private i public (patrz Podstawy Delphi rozdział 3.3 str 20) Korekta przykładu wyłączenie widoczności metody obwod poprzez dodanie dyrektyw. Przykład (p9) zapis w trzech plikach. W pliku projektu (głównym) - p1.dpr: uses modult2; var t: TT2; writeln('podaj dl bokow trojkata'); readln(t.a, t.b, t.c); writeln('pole=', t.pole); Plik modułu modult2: unit modult2; uses modult; type TT2= object(ttrojkat) function ha:real; function hb:real; function hc:real; function TT2.ha:real; ha:=2*pole/a; function TT2.hb:real; hb:=2*pole/b; 3

function TT2.hc:real; hc:=2*pole/c; Plik modułu modult: unit modult; type Ttrojkat= object private function obwod:real; public function pole:real; function Ttrojkat.obwod:real; obwod:=a+b+c; function Ttrojkat.pole:real; var p:real; p:=obwod/2; pole:=sqrt(p*(p-a)*(p-b)*(p-c)); Obiekty dynamiczne class (patrz Podstawy Delphi rozdział 4) W Pascalu istnieją dwa typy klas: - statyczne w deklaracji słowo object - dynamiczne w deklaracji słowo class Są one podobne w zakresie deklarowania typów i zmiennych zasad dostępu do składowych, organizacji dziedziczenia itp. NajwaŜniejsze róŝnice to: - Dynamiczny charakter zmiennych typu klasowego. - Konieczność inicjowania klas za pomocą konstruktora. - Istnienie wspólnego typu macierzystego dla wszystkich klas: TObject. Typ TObject (patrz Podstawy Delphi 4.2) Istnieje typ TObject, który jest przodkiem wszystkich klas. Dziedziczenie od tego typu jest domyślne i nie musi być wykazywane w deklaracji. 4

Predefiniowany typ TObject ma szereg składowych (same metody), które oczywiście są przekazywane do potomków i dlatego kaŝda klasa ma od razu pewne wyposaŝenie. NajwaŜniejsze ze składowych specjalizowana metoda konstruktor Create, druga specjalizowana metoda destruktor Destroy oraz metoda Free. Dla klas moŝna definiować własne konstruktory, jednak często wykorzystywany jest konstruktor standardowy dziedziczony z typu TObject. Odmiennie niŝ dla obiektów statycznych deklarowanie zmiennej obiektowej nie powoduje rezerwacji obszaru pamięci dla tej zmiennej rezerwowany jest tylko mały obszar wystarczający do zapisania wskaźnika (adresu pamięci). KaŜda zmienna klasowa musi być zainicjowana (kreowana) w czasie wykonywania programu poprzez wywołanie konstruktora. Konstruktor rezerwuje odpowiednią pamięć i wpisuje adres zarezerwowanego obszaru w zmiennej obiektowej. Zatem obowiązuje schemat postępowania: type TObiekt = class { wykaz składowych } var ZmObiekt: TObiekt; {rezerwacja miejsca na wskaźnik } ZmObiekt:= TObiekt.Create; { rezerwacja miejsca na obiekt i wpisanie adresu do ZmObiekt } { wykorzystanie obiektu ZmObiekt } ZmObiekt.Destroy; { zwolnienie pamięci na obiekt } Wywołanie konstruktora powinno mieć postać instrukcji przypisania: < zmienna obiektowa> := <typ obiektowy >.Create; Do destrukcji obiektu moŝna wykorzystać zamiennie metodę Free np.: ZmObiekt.Free; Przykład przerobienie PObiekt potem P8 i ew. p9 Zastosowanie metod obiektu TObject Dodanie: Writeln(Ttrojkat.ClassName); // wynik: Tc Writeln(Ttrojkat.InstanceSize); // wynik: 8 Writeln(Ttrojkat.ClassParent.ClassName); // wynik: TObject Writeln(Ttrojkat.InheritsFrom(TObject)); // wynik: TRUE Writeln(Ttrojkat.ClassNameIs('Ttrojkat')); // wynik: TRUE 5

Writeln(t.ClassName); // wynik: Tc Writeln(t.InstanceSize); // wynik: 8 Writeln(t.ClassParent.ClassName); // wynik: TObject Writeln(t.InheritsFrom(TObject)); // wynik: TRUE Writeln(t.ClassNameIs('Ttrojkat')); // wynik: TRUE 6