Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałSeweryna Badura Został zmieniony 11 lat temu
1
Programowanie zorientowane obiektowo 1 Programowanie zorientowane obiektowo (object-oriented programming) jest to metodologia programowania bazująca na następujących własnościach języka: Hermetyzacji (encapsulation), którą w Adzie zapewniają pakiety i typy prywatne, Ogólności (genericity), którą w Adzie umożliwiają typy ogólne i jednostki programowe ogólne, Dziedziczeniu (inheritance) polegającemu na tym, że nowy typ przejmuje pewne, lub wszystkie własności istniejącego typu macierzystego. W Adzie dziedziczenie umożliwiają typy pochodne i typy rozszerzalne, nazywane czasami typami znakowanymi (tagged types), Polimorfizmowi (polymorphism) częściowo realizowanemu w Adzie przez przeciążanie podprogramów i rozszerzonemu przez pojęcie wiązania dynamicznego (dynamic dispatching).
2
Programowanie zorientowane obiektowo 2 Typy rozszerzalne Typ rekordowy może być zadeklarowany jako typ rozszerzalny (tagged type) w celu zaznaczenia, że może być rozszerzony przez dodanie pewnych pól. Każdy obiekt typu rozszerzalnego otrzymuje znacznik (tag), który jest podobny do ukrytego wyróżnika, przy czym znaczniki manipulowane są automatycznie przez wykonywany program. Przykład Weźmy pod uwagę następującą deklarację typu rozszerzalnego:
3
Programowanie zorientowane obiektowo 3 type Person_Type is tagged record Name : Name_Type; Gender : Gender_Type; Birth_Date : Date_Type; end record; przy czym type Gender is (Female, Male); Name_Type jest pewnym typem napisowym, a Date_Type może być typem rekordowym postaci type Date_Type is record Day: Day_Number := Day_Number'First; Month: Month_Number := Months'First; Year: Year_Number := Year_Number'First; end record;
4
Programowanie zorientowane obiektowo 4 Typ Person_Type zadeklarowano w pakiecie definicyjnym Persons razem z pewną liczbą operacji wykonywanych na danych tego typu. Chcemy wydzielić osoby nazywane zatrudnionymi Employee, których dane powinny dodatkowo obejmować numer identyfikacyjny oraz datę zatrudnienia. type Employee_Type is new Person_Type with record ID_Number : ID_Type; Start_Date : Date_Type; end record;
5
Programowanie zorientowane obiektowo 5 W ten sposób otrzymujemy nowy typ rekordowy, który ma pięć pól: dwa nowe ID_Number i Start_Date oraz trzy odziedziczone po typie Person. Zauważmy, że nowy typ można zadeklarować wraz z odpowiednimi operacjami w nowym pakiecie, lub programie, przy czym istotne jest to, że nie ma to wpływu na istniejący już pakiet Persons i programy klienckie tego pakietu. Możemy zdefiniować następne typy type Professional_Type is new Employee_Type with record Month_Salary : Quantity; end record;
6
Programowanie zorientowane obiektowo 6 type Clerical_Type is new Employee_Type with record Hourly_Wage : Quantity; end record; przy czym Quantity jest typem reprezentującym wartości w używanej walucie razem z odpowiednimi operacjami na danych tego typu. Konwersja między typami Podane typy tworzą hierarchię typów Person_Type Employee_Type Proffesional_Type Clerical_Type
7
Programowanie zorientowane obiektowo 7 Możemy dokonać jawnej konwersji typu z niższego poziomu na typ wyższego poziomu. P : Person_Type; E : Employee_Type; R : Professional_Type; Możemy napisać agregat rekordowy R := (Name => "Maria Madra", Gender => Female, Birth_Date => (Day => 21, Month =>10, Year => 1976), ID_Number => 2345, Start_Date => (Day => 1, Month => 6, Year => 2001), Month_Salary => 5000.00);
8
Programowanie zorientowane obiektowo 8 i dokonać konwersji w górę P := Person_Type(R); która jest znaną formą. W przypadku typów rozszerzalnych podana konwersja usuwa dodatkowe pola. Jeżeli dokonujemy konwersji w dół, to ponieważ typy z poziomu niższego posiadają dodatkowe pola, stosujemy specjalną formę agregatu. Jeżeli mamy P := (Name => " Maria Madra", Gender => Female, Birth_Date => (Day => 21, Month =>10, Year => 1976));
9
Programowanie zorientowane obiektowo 9 możemy napisać E := (P with ID_Number => 2345, Start_Date => (Day => 1, Month => 6, Year => 2001)); Część określająca wartości dodatkowych pól, czyli podana po słowie kluczowym with nazywana jest rozszerzeniem agregatu (extension aggregate). Oczywiście, należy zwrócić uwagę na to, że zazwyczaj rekordowy typ rozszerzalny jest typem prywatnym, co powoduje, że programy klienckie nie mogą zawierać agregatów odwołujących się do poszczególnych pól rekordu.
10
Programowanie zorientowane obiektowo 10 Operacje na typach rozszerzalnych W przypadku typów rozszerzalnych typ wyprowadzony z typu macierzystego dziedziczy po nim wszystkie operacje podstawowe, którymi, jak pamiętamy, są atrybuty, operacje zdefiniowane wstępnie oraz funkcje, procedury operatory, których parametrami formalnymi, lub wynikami są dane typu macierzystego. Często istnieje potrzeba zmiany tych operacji w przypadku typu wyprowadzonego. Przykład Geometria elementarna Przypuśćmy, że chcemy opracować rodzinę pakietów dostarczających narzędzi do obliczeń z geometrii elementarnej.
11
Programowanie zorientowane obiektowo 11 package Objects is type Object_Type is tagged record X_Coord : Float; Y_Coord : Float; end record; function Distance (Obj : Object_Type) return Float; function Area (Obj : Object_Type) return Float; end Objects;
12
Programowanie zorientowane obiektowo 12 with Objects; use Objects; package Shapes is type Point is new Object_Type with null record; type Circle is new Object_Type with record Radius : Float; end record; function Area (C : Circle) return Float; end Shapes;
13
Programowanie zorientowane obiektowo 13 package body Objects is function Distance (Obj : Object_Type) return Float is begin return Sqrt(Obj.X_Coord**2 + Obj.Y_Coord**2); end Distance; function Area (Obj : Object_Type) return Float is begin return 0.0; end Area; end Objects;
14
Programowanie zorientowane obiektowo 14 Zadanie 1.Napisać deklarację typu Cylinder wyprowadzonego z typu Circle. Nowy typ powinien mieć pole Height, które reprezentuje wysokość walca. 2.Przypuśćmy, że mamy zadeklarowaną zmienną O : Object_Type := (1.0, 0.5); Napisać rozszerzenie agregatu przypisującego zmiennej Cyl:Cylinder promień koła równy 40.0 i wysokość walca równą 50.0.
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.