1 / 14

Programowanie zorientowane obiektowo 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 ,

Download Presentation

Programowanie zorientowane obiektowo 1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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ąpakietyi 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_Typejest pewnym typem napisowym, aDate_Typemoż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_Typezadeklarowano w pakiecie definicyjnymPersonsrazem 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 noweID_Numberi Start_Dateoraz trzy odziedziczone po typiePerson. 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ż pakietPersonsi 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 czymQuantityjest 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 packageObjects 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 newObject_Typewith record Radius : Float; end record; function Area (C : Circle) returnFloat; 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 • Napisać deklarację typuCylinderwyprowadzonego z typuCircle. Nowy typ powinien mieć poleHeight, które reprezentuje wysokość walca. • 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.

More Related