Programowanie obiektowe w Pascalu

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

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

Programowanie modułowe

Programowanie modułowe

Podstawy Programowania semestr drugi. Wykład czternasty

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

Algorytmy i struktury danych

Dziedziczenie jednobazowe, poliformizm

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

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

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

Wykład 8: klasy cz. 4

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

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

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

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

Język programowania. Andrzej Bobyk

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

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

PHP 5 język obiektowy

Wykład 5: Klasy cz. 3

Dziedziczenie. dr Jarosław Skaruz

Podstawy Programowania Obiektowego

Instrukcja warunkowa i złoŝona.

Wstęp do programowania

Czym są właściwości. Poprawne projektowanie klas

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

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

Podstawy Programowania 2

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Materiały do laboratorium MS ACCESS BASIC

TEMAT : KLASY DZIEDZICZENIE

Kurs WWW. Paweł Rajba.

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

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

Język programowania PASCAL

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

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

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

Programowanie obiektowe

Delphi Laboratorium 3

Delphi podstawy programowania. Środowisko Delphi

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

Pakiety i interfejsy. Tomasz Borzyszkowski

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

1. Programowanie obiektowe. Wstęp.

Temat: Podstawy języka Object Pascal

SZKOLENIA I STUDIA PODYPLOMOWE DOFINANSOWANE Z EUROPEJSKIEGO FUNDUSZU SPOŁECZNEGO

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

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Programowanie obiektowe - 1.

Dokumentacja do API Javy.

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Programowanie obiektowe

Kompozycja i dziedziczenie klas

Wprowadzenie do programowanie obiektowego w języku C++

Rozdział 4 KLASY, OBIEKTY, METODY

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

.NET Klasy, obiekty. ciąg dalszy

Wstęp do programowania 2

Wprowadzenie do programowania w języku C

Dziedziczenie. Tomasz Borzyszkowski

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Programowanie obiektowe

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Mechanizm dziedziczenia

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

PROJEKT CZĘŚCIOWO FINANSOWANY PRZEZ UNIĘ EUROPEJSKĄ. Opis działania raportów w ClearQuest

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

OBIEKTY PHP. G. Panuś

Informatyzacja Przedsiębiorstw

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

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

PARADYGMATY PROGRAMOWANIA Wykład 4

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Algorytmy i struktury danych

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Technologie i usługi internetowe cz. 2

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

KaŜdy z formularzy naleŝy podpiąć do usługi. Nazwa usługi moŝe pokrywać się z nazwą formularza, nie jest to jednak konieczne.

XII. Warunek wielokrotnego wyboru switch... case

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Wrocław, dn. 19 kwietnia 2006 roku. Anna Kaleta Piotr Chojnacki IV rok, informatyka chemiczna Liceum Ogólnokształcące nr 10 we Wrocławiu

Pliki. Operacje na plikach w Pascalu

Przekazywanie argumentów wskaźniki

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

int suma; pralka czerwona; // definicja egzemplarza obiektu pralka * wskaŝ; // definicja wskaźnika pralka & ruda = czerwona; // definicja referencji

Wykład 9: Polimorfizm i klasy wirtualne

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

Programowanie w języku Python. Grażyna Koba

OBIEKTOWA MAPA KODU W ŚRODOWISKU MS ACCESS

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

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

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

Transkrypt:

Programowanie obiektowe w Pascalu Po co obiekty? Przykład Obliczenie obwodu trójkąta Sposób tradycyjny: var a,b,c: real; function obwod: real; obwod:=a+b+c; readln(a, b, c); writeln( Obwod=, obwod);... PowyŜszy sposób zapisu jest najbardziej oczywisty i zupełnie wystarczający jeśli naszym celem jest rozwiązanie tylko tego problemu. Inaczej jest jeŝeli jest to jedynie fragment powaŝnego zadania, do rozwiązania którego zaangaŝowany jest zespół programistów. Oprogramowanie zagadnień związanych z trójkątem naleŝy do zadań jednego programisty, a inni rozwiązują pozostałe problemy. Wówczas istnieje konieczność uzgodnień oznaczeń stosowanych przez poszczególnych programistów. Stosowane oznaczenia zmiennych a, b, c oraz nazwa funkcji: obwod nie moŝe być zastosowana przez innych. JeŜeli rozwiązywany problem jest duŝy, opisywany b. wieloma parametrami, to ciągłe uzgadnianie oznaczeń jest b. kłopotliwe i prawie nieuchronnie prowadzi do błędów. Pewne złagodzenie problemu zachodzi jeśli zapiszemy rozwiązanie następująco: type trojkat = record function obwod:real; obwod:=t.a+t.b+t.c; var t: trojkat; readln(t.a, t.b, t.c); writeln( Obwod=, obwod);.... W takim przypadku wszystkie oznaczenia parametrów trójkąta mogą być dowolne, uzgodnienia wymaga tylko nazwa jednej zmiennej (rekordowej) oraz nazwy zapisanych procedur i funkcji. Osoba, której zadaniem jest oprogramowanie wszystkich zagadnień 1

związanych z trójkątem moŝe przyjąć zupełnie dowolny system oznaczeń zmiennych wszystkie one będą polami rekordu i co za tym idzie stosowane w wynikowym programie z prefiksem-nazwą rekordu co pozwoli na ich odróŝnianie od innych nazw. śeby umoŝliwić rozdzielne rozwiązywanie zagadnień na które podzielono złoŝony problem w sposób jeszcze doskonalszy, pozwalający na zupełnie dowolne dobieranie oznaczeń (takŝe procedur i funkcji) naleŝy zastosować programowanie obiektowe. type trojkat = object function obwod:real; function trojkat.obwod:real; obwod:=a+b+c; var t: trojkat; readln(t.a, t.b, t.c); writeln( Obwod=, t.obwod);.... Jak widać z powyŝszego przykładu obiekt jest rozwinięciem idei rekordu. Pozwala na zamknięcie w jednym pojemniku wszystkich nazw wykorzystywanych do opisu problemu: zarówno zmiennych-pól jak i nazw procedur. Typy obiektowe w Pascalu definiowane są z wykorzystaniem słowa kluczowego object zgodnie ze składnią: type <identyfikator typu obiektowego> = object [(nazwa przodka)] [<lista deklaracji pól obiektu>] [< lista zapowiedzi metod obiektu>] W prostym przypadku gdy w deklaracji nie umieszczono nazwy przodka oraz nie zdefiniowano Ŝadnej metody obiekt ma budowę i własności rekordu. Na przykład: type TArgumenty = object a, b, c: Real; Definicja typu obiektowego umieszczona powyŝej róŝni się od definicji rekordu uŝyciem słowa kluczowego object. Pola tak zdefiniowanego obiektu moŝna wykorzystywać jedynie w sposób rekordowy. W przykładzie typu Trojkat moŝna zaobserwować charakterystyczny sposób posługiwania się obiektami i składowymi obiektów. Podstawowe zasady moŝna sformułować następująco: 2

W deklaracji typu obiektowego w pierwszej kolejności wymieniane są pola obiektu, a w drugiej metody. KaŜda metoda deklarowana jest w typie obiektowym w postaci zapowiedzi zawierającej jedynie nagłówek metody. Kompletna deklaracja metody podawana jest odrębnie poza deklaracją typu obiektowego. Nazwa metody jest uzupełniana prefiksem nazwą typu obiektowego. Lista parametrów w nagłówku nie moŝe być zmieniona w stosunku do poprzedzającej zapowiedzi. MoŜe być jedynie powtórzona bez zmian lub opuszczona w całości. Typy obiektowe mogą być deklarowane tylko globalnie, w programie lub w module lecz nie wewnątrz procedury. Zmienne obiektowe muszą być deklarowane przez wykorzystanie identyfikatora typu (zdefiniowanego zawsze globalnie), a nie opisu typu. Metoda naleŝy do obiektu i w związku z tym posiada dostęp do pól i innych metod obiektu bezpośrednio. W treści procedur moŝna korzystać z nazw pól bez konieczności dopisywania prefiksów lub umieszczania ich w parametrach metod - obydwa rozwiązania są nawet zabronione. Np. niedopuszczalny jest zapis: procedure. Trojkat obwod; Trojkat obwod := Trojkat.a + Trojkat.b + Trojkat.c; {błędne odwołania do pól} Poza definicją typu obiektowego i definicjami związanych z nim metod przy odnoszeniu się do pól lub metod obiektu naleŝy uŝywać nazw dwuczęściowych: <nazwa zmiennej obiektowej>. < nazwa pola lub metody> Podobnie jak w przypadku rekordów moŝliwe jest uproszczenie dostępu do składowych obiektu przy wykorzystaniu instrukcji with. Zmienne lokalne i parametry metody nie mogą mieć tych samych nazw co pola obiektu. W metodach moŝna wywoływać inne metody obiektu nawet te zdefiniowane szczegółowo później (bez prefiksu, wystarczy nazwa metody). type trojkat = object function obwod: real; function pole: real; function trojkat.obwod:real; obwod:=a+b+c; 3

function trojkat.pole:real; var p: real; p:=obwod/2; pole:=sqrt(p*(p-a)*(p-b)*(p-c)); var t: trojkat; readln(t.a, t.b, t.c); writeln( Obwod=, t.obwod, Pole=, t.pole);.... Wszystkie metody posiadają niejawny parametr Self reprezentujący obiekt przekazywany przez zmienną. Oznacza to, Ŝe do składowych obiektu moŝna odwoływać się takŝe z uŝyciem prefiksu Self: Self. <nazwa składowej> MoŜliwość ta na ogół nie jest wykorzystywana prościej i równie skutecznie działa odwołanie bez prefiksu Self. Czasami jednak parametr Self jest przydatny, np. gdy pola w rekordzie zadeklarowanym lokalnie w metodzie mają te same nazwy co pola obiektu. Np. w przypadku metody zadeklarowanej następująco: procedure Trojkat.Przykład; var rek: record a: Real; with rek do a:=1; {odwołanie do pola rekordu lokalnego} Self.a:=1;...... {odwołanie do pola obiektu} parametr Self umoŝliwia rozróŝnienie odwołań do pola rekordu lokalnego i obiektu. Hermetyzacja Zasadą programowania obiektowego jest hermetyzacja dostępu do pól obiektu. W myśl tej zasady nie naleŝy (choć moŝna) korzystać z tych pól inaczej jak za pośrednictwem metod. KaŜdy obiekt powinien być wyposaŝony w odpowiednią ilość metod zapewniających inicjowanie pól wartościami oraz metod zwracających wyznaczone wartości. PoniŜej zamieszczono deklarację typu obiektowego spełniającego podobne zadania jak zdefiniowany wcześniej obiekt Trojkat. Dzięki zdefiniowaniu w nim dodatkowych metod 4

UstawDane i ZwrocDane moŝliwa jest realizacja zasady dostępu do pól tylko za pomocą metod. unit BibTr; interface type trojkat = object function obwod: real; function pole: real; procedure UstawDane(x, y, z: Real); procedure ZwrocDane(var x, y, z: Real); function BokA: real; implementation function trojkat.obwod:real; obwod:=a+b+c; function trojkat.pole:real; var p: real; p:=obwod/2; pole:=sqrt(p*(p-a)*(p-b)*(p-c)); procedure trojkat.ustawdane(x, y, z: Real); a := x; b := y; c:= z; procedure trojkat.zwrocdane(var x, y, z: Real); x := a; y := b; z:= a; function BokA: real; BokA:=a; Deklaracja typu Trojkat została umieszczona w module. W takim przypadku wyszczególnienie treści metod zapowiedzianych w deklaracji typu obiektowego powinno być umieszczone w części implementacyjnej modułu. 5

Program wykorzystujący obiekt zadeklarowany w module BibTr moŝe być sformułowany następująco: uses BibTr; var t: Trojkat; t.ustawdane(4, 5, 6); writeln( Pole trojkata=, t.pole:10:2); W programie zgodnie z zasadą hermetyzacji wszystkie odwołania do pól obiektu realizowane są za pomocą metod. Dyrektywy Private i Public W definicji typu obiektowego mogą występować dodatkowe dyrektywy private i public. Obie słuŝą do sterowania dostępem do składowych obiektu. Znaczenie dyrektyw jest następujące: Private oznacza ograniczenie dostępu do składowych obiektu zadeklarowanych poniŝej tej dyrektywy. Składowe te są widoczne jedynie wewnątrz modułu, w którym zdefiniowano obiekt. Public przywraca pełną dostępność dla składowych deklarowanych poniŝej. UŜywana do zakończenia zakresu dyrektywy private. Przykład Zmiana deklaracji typu obiektowego w przytaczanym powyŝej module BibTr na: type trojkat = object function obwod: real; function pole: real; procedure UstawDane(x, y, z: Real); procedure ZwrocDane(var x, y, z: Real); private powoduje, Ŝe w programie wykorzystującym ten moduł dostęp do pól obiektu moŝe być realizowany tylko za pośrednictwem metod UstawDane i ZwrocDane. Bezpośrednie odwołania do tych pól są zabronione. NaleŜy podkreślić, Ŝe ograniczenie dostępu do pól za pomocą dyrektywy private funkcjonuje jedynie poza modułem, w którym zadeklarowano typ obiektowy. Wewnątrz tego modułu składowe obiektu są w pełni widoczne. Obiekty zadeklarowane w jednym module mogą wzajemnie swobodnie korzystać z dostępu do swoich prywatnych składowych. 6

Dziedziczenie Dziedziczenie jest waŝną cechą programowania obiektowego pozwalającą na łatwą rozbudowę, a takŝe modyfikację opracowanych obiektów. Istotne jest, Ŝe rozbudowa obiektu nie wymaga ingerencji w juŝ opracowany kod programu. Co więcej, wystarczy by moduły zawierające definicje modyfikowanych typów obiektowych były dostępne w postaci skompilowanej. Uzupełnienie przedstawionego powyŝej typu obiektowego Trojkat o metody wyznaczania wysokości oraz promienia koła wpisanego w trójkąt moŝe być dokonane następująco: unit BibTr2; interface uses BibTr; type trojkat2 = object(trojkat) function wysokosca: real; function Rwpisany: real; implementation function trojkat2.wysokosca: real; wysokosca:=2*pole/boka; function trojkat2.rwpisany: real; Rwpisany:=4*pole/obwod; PowyŜszy moduł powinien być zapisany w pliku BIBTR2.PAS. W czasie kompilacji powinien być dostępny moduł BIBTR.PAS (wystarczy wersja półskompilowana BIBTR.DCU) Typ wymieniony w nawiasach za słowem kluczowym object nazywany jest typem bazowym lub przodkiem. Typ definiowany z wykorzystaniem dziedziczenia nazywany jest typem potomnym. Dla typu trojkat typem bazowym jest typ trojkat2. Typ trojkat2 jest typem potomnym typu trojkat. Obiekt trojkat2 posiada składowe - pola i metody odziedziczone od typu trojkat a ponadto metody WysokoscA i Rwpisany zdefiniowane bezpośrednio. 7

Przykładowe wykorzystanie typu trojkat2 moŝe być następujące: uses BibTr2; var t: Trojkat2; with t do UstawDane(4, 5, 6); writeln( Pole trojkata=, t.pole:10:2); writeln( Wysokosc opuszczona na bok A:, wysokosca:10:2); writeln( Promień okręgu wpisanego:, Rwpisany:10:2); Dziedziczenie moŝe być wielopoziomowe tj. kaŝdy potomek moŝe posiadać własnego potomka drugiego i dalszych stopni. KaŜdy potomek dziedziczy zarówno składowe swojego bezpośredniego przodka jak i składowe wszystkich dalszych przodków. Obiekt trojkat2 moŝe być wykorzystany do zdefiniowania kolejnego potomka: unit BibTr3; interface uses BibTr2; type trojkat3 = object(trojkat2) function UstawDane(x, y, z: real): boolean; function Ropisany: real; private alfa, beta, gamma: real; implementation function trojkat3. UstawDane(x, y, z: real): boolean; var r, p: real; if (x>y+x) or (y>x+z) or (z>x+y) then UstawDane:=false else a := x; b := y; c: = z; p:=obwod/2; r:=pole/p; alfa:=2*arctan((r/(p-a); beta:=2*arctan((r/(p-b); gamma:=2*arctan((r/(p-c); UstawDane:=true; 8

function trojkat3.ropisany: real; Ropisany:=a/2/sin(alfa); Zaprezentowana wyŝej deklaracja typu Trojkat3, a w szczególności metody UstawDane jest poprawna tylko wtedy gdy w bazowym typie Trojkat składowe-pola a, b, c są zadekretowane jako publiczne (metoda UstawDane zawiera odwołania do tych składowych). Przy konstruowaniu obiektów potomnych naleŝy przestrzegać następujących zasad: Obiekt moŝe posiadać tylko jednego bezpośredniego przodka. Dziedziczenie obiektów moŝna organizować w kaskadę, gdzie jeden jest potomkiem drugiego, a jednocześnie przodkiem następnego obiektu. Obiekt moŝe mieć kilku potomków (równoległych). Odmiennie jak nazwy metod, nazwy pól obiektów w hierarchii dziedziczenia nie mogą się pokrywać. W szczególności Ŝadne pole obiektu potomnego nie moŝe posiadać nazwy identycznej z polem przodka (bezpośredniego ani dalszego). Metoda moŝe mieć nazwę identyczną jak nazwa metody przodka. JeŜeli taki fakt następuje, to metoda przodka zostaje przesłonięta i staje się niedostępna. Mechanizm przesłaniania metod obowiązuje takŝe w hierarchii wielopoziomowej. Wywołanie metody powoduje kaŝdorazowo przeszukiwanie całej hierarchii dziedziczenia począwszy od danego obiektu poprzez najbliŝszego przodka do dalszych lecz tylko do momentu znalezienia metody. Metody przodków są przesłaniane jeśli metoda w aktualnym obiekcie ma poszukiwana nazwę, Z ostatniej ze sformułowanych powyŝej zasad wynika, Ŝe zdefiniowanie metody UstawDane w typie Trojkat3 powoduje przesłonięcie metody przodka o tej samej nazwie. Wywoływanie metody o powtórzonej nazwie demonstruje poniŝszy przykład: uses BibTr, BibTr2, BibTr3; var t1: Trojkat2; t2: Trojkat3; writeln( Podaj długości boków trójkąta ); readln(a, b, c); with t2 do if UstawDane(a, b, c) then 9

writeln( Pole trojkata=, Pole:10:2); writeln( Promień okręgu opisanego =, Ropisany:10:2); with t1 do UstawDane(a, b, c); writeln( Pole trojkata=, Pole:10:2); { błąd jeśli liczby a, b, c nie tworzą trójkąta } W przykładzie zadeklarowano dwie zmienne obiektowe. Wywołanie metody UstawDane dla obu zmiennych powinno być róŝne. Ponadto, w przypadku zmiennej typu Trójkat3 moŝliwe jest wykluczenie moŝliwości powstania błędu gdy uŝytkownik poda 3 wartości, które nie tworzą trójkąta. W uzupełnieniu zasad dotyczących dziedziczenia naleŝy dodać, Ŝe metody przodków przesłaniane z powodu ponownego uŝycia identycznych nazw mogą być wywoływane z wnętrza metod obiektów potomnych. W wywołaniu takim nazwa metody musi być poprzedzona nazwą typu obiektowego w którym zdefiniowano przesłoniętą metodę. Definicja metody UstawDane w typie Trojkat3 moŝe być zatem zapisana w postaci: function trojkat3. UstawDane(x, y, z: real): boolean; var r, p: real; if (x>y+x) or (y>x+z) or (z>x+y) then UstawDane:=false else Trojkat2.UstawDane(x, y, z); p:=obwod/2; r:=pole/p; alfa:=2*arctan((r/(p-boka); beta:=2*arctan((r/(p-bokb); gamma:=2*arctan((r/(p-bokc); UstawDane:=true; Taka postać metody UstawDane wydaje się bardziej odpowiednia zamiast powtórzenia treści juŝ zdefiniowanej metody zawiera jej wywołanie. Dodatkowo, jej działanie jest poprawne takŝe w sytuacji gdy składowe-pola a, b, c w typie bazowym są zadeklarowane jako prywatne. 10