mechanizmy dziedziczenia n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Mechanizmy dziedziczenia PowerPoint Presentation
Download Presentation
Mechanizmy dziedziczenia

Loading in 2 Seconds...

play fullscreen
1 / 41

Mechanizmy dziedziczenia - PowerPoint PPT Presentation


  • 129 Views
  • Uploaded on

Języki programowania obiektowego. Mechanizmy dziedziczenia. Andrzej Chybicki Andrzej.Chybicki@eti.pg.gda.pl Pok. 744. General Concept. Typy definiowane przez użytkownika powinny jak najlepiej oddawać rzeczywistość świata modelowanego przez programistę.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Mechanizmy dziedziczenia' - taima


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
mechanizmy dziedziczenia

Języki programowania obiektowego

Mechanizmy dziedziczenia

Andrzej Chybicki

Andrzej.Chybicki@eti.pg.gda.pl

Pok. 744

general concept
General Concept
  • Typy definiowane przez użytkownika powinny jak najlepiej oddawać rzeczywistość świata modelowanego przez programistę.
  • Klasy (obiekty) odzwierciedlają rzeczywiste obiekty
  • Takie podejście ma umożliwić projektantowi skupienie się na koncepcji problemu, jaki ma dany program rozwiązać, a nie na sposobie działania maszyny obliczeniowej
klasy
Klasy
  • Klasy reprezentują koncepcję problemu i są platformą pomiędzy techniczną zasadą działania komputera a rozwiązywanym zagadnieniem.
  • Z czasem stało się jasne, że samo mechanizm definiowania klas jest niewystarczający do rozwiązywania niektórych problemów programistycznych
dziedziczenie
Dziedziczenie
  • Różne klasy są ze sobą związane, istnieje między nimi związek. Oczywiście można ręcznie implementować ten związek za każdym razem powielając wspólne pola różnych klas czy definiując związki między nimi
  • Rozwiązaniem tego problemu jest dziedziczenie klas
przyklad
Przyklad
  • Mamy firmę i piszemy program odzwierciedlający strukturę osób zatrudnionych w przedsiębiorstwie
  • Zaczynami od podstawowego stanowiska :

Pracownik (klasa Employee)

  • Następnie dodajemy stanowisko Manager
  • Jaki jest związek pomiędzy tymi klasami?
  • Jak zdefiniować za pomocą wbudowanych mechanizmów część wspólną obu klas, co je różni? Która klasa ma dziedziczyć po której?
om wienie
Omówienie
  • Rozwiązanie to powoduje że nie trzeba powielać pól w klasie Manager, jest łatwe do zrozumienia i jasne
  • Problemy:
    • W tej interpretacji Manager nie jest Employee, czyli nie można używać zamiennie tych dwóch klas. Trzeba np. osobno implementować funkcje operujące na jednej i na drugiej klasie ( uciążliwe i nieefektywne)
    • Obiekty Manager nie mogą być wstawiane do tej samej listy co obiekty Employee ( co zrobić z mechanizmem wyszukiwania pracowników firmy – przecież manager to też pracownik!!)
zalety rozwi zania z dziedziczeniem
Zalety rozwiązania z dziedziczeniem
  • Klasa manager jest podtypem klasy Employee, więc gdziekolwiek w argumencie podaje się employee tam można też podać jako argument obiekt klasy Manager, ale nie odwrotnie!!
om wienie przyk adu i nomenklatura
Omówienie przykładu i nomenklatura
  • Klasa Employee jest klasą bazową (ang. Base Class) dla klasy Manager
  • Klasa Manager jest klasa wywiedzioną klasy Employee (ang. derived from)
  • Można się spotkać z terminem :Manager jest klasą dziedziczącą po klasie Employee(inherited).
  • Supeclass i subclass
  • Klasa Manager posiada te same pola co klasa Employee i dodatkowo pole level
dost p do zmiennych i funckji klasy
Dostęp do zmiennych i funckji klasy
  • Public – zawsze dostępna
  • Private –zmienne i funkcje dostępne tylko dla czlonków klasy (class members)
  • Protected – zmienne i funkcje dostępne dla członków klasy i klas wywiedzionych
funkcje wirtualne
Funkcje wirtualne
  • Funkcje wirtualne pozwalają na deklarowanie funkcji w klasie bazowej oraz re-definiowanie ich w klasach wywiedzionych.
  • O tym która z implementacji funkcji wirtualnych zostanie w danym momencie wykonana decyduje typ obiektu z którego funkcja jest wywoływana – spójrzmy na przykład:
om wienie1
Omówienie
  • Slowo kluczowe virtual oznacza że funkcja print() może slużyć jako interfejs do wywolania funkcji z klasy Employee lub funkcji o tej samej nazwie i ilości argumentów z obiektów klas pochodnych
  • To kompilator i loader w momencie wywołania danej funkcji dobiera odpowiednią implementację funkcji wirtualnej która zostanie wykonana.
  • Funckja print() z klasy Manager nadpisuje (overrides) funkcję z klasy Employee
klasy abstrakcyjne
Klasy abstrakcyjne
  • Wiele klas jest przydatnych zarówno jako klasy zwykle oraz jako klasy będące klasami bazowymi dla innych klas(Employee). Istnieją jednak klasy, które prezentują pewien abstrakcyjny obiekt, którego istnienie nie ma sensu. Dopiero dziedziczenie po takim abstrakcyjnym obiekcie daje w efekcie użyteczny obiekt. Spójrzmy na przykład:
klasy abstrakcyjne1
Klasy abstrakcyjne
  • Taka deklaracja ma sens ale jest bezsensowna i malo elegancka:Shape s; // silly: ‘‘shapeless shape’’
klasy abstrakcyjne om wienie
Klasy abstrakcyjne - omówienie
  • „pure virtual functions” są inicjowane za pomocą dopisania do funkcji ciągu znaków „=0”
  • Klasa, która posiada jedną lub więcej funkcji „pure virtual”, jest klasą abstrakcyjną
  • Nie można tworzyć obiektów klasy abstrakcyjnej

Shape s ; // error: variable of abstract class Shape

klasa wywiedziona z klasy abstrakcyjnej mo e te by klas abstrakcyjn
Klasa wywiedziona z klasy abstrakcyjnej może też być klasą abstrakcyjną
  • A pure virtual function that is not defined in a derived class remains a pure virtual function, so thederived class is also an abstract class.
  • Sytuację tą ilustruje poniższy przykład:
wielodziedziczenie ang multiple inheritance
Wielodziedziczenie (ang. multiple inheritance)
  • Klasyczne dziedziczenie polega na rozszerzaniu konkretnej – jednej klasy bazowej. Język C umożliwia dziedziczenie po dowolnej ilości klas bazowych

class Satellite : public Task , public Displayed {

// ...

};

slide29

Podobnie jak w tradycyjnym dziedziczeniu gdziekolwiek jako argument podajemy jedną z klas bazowych możemy równie dobrze podać jako argument klasę dziedziczącą

wielodziedziczenie
Wielodziedziczenie
  • Zachowanie funkcji wirtualnych i klas abstrakcyjnych jest analogiczne jak w ‘single inheritance’
  • Istotna jest pewna różnica: Klasa wywiedziona jest podklasą dwóch albo więcej klas więc jest podtypem każdej z klas po których dziedziczy.
wielodziedziczenie a dwuznaczno ambiguity
Wielodziedziczenie a dwuznaczność (ambiguity)
  • Może się zdarzyć sytuacja w której obie klasy bazowe mają funckje o tej samej nazwie i argumentach. W przypadku gdy w klasie wywiedzionej wywolamy tę funkcję pojawia się problem dwu-znaczności (ambiguity). Spójrzmy na przykład:
inne rozwi zanie
Inne rozwiązanie
  • Mechanizm explicit disambiguationjest ‘brzydki’ jak mówi sam autor języka C. Aby rozwiązać powyższy problem z reguly tworzy się metodę nadpisującą w klasie wywiedzionej i w jej ciele implementuje się mechanizm explicit disambiguation. Przedstawia to poniższy przykład:
wielodziedziczenie1
Wielodziedziczenie
  • Wraz z umożliwieniem wielodziedziczenia istnieje możliwość dziedziczenia tej samej klasy dwukrotnie.

struct Link {

Link * next ;

};

class Task : public Link {

/ / the Link is used to maintain a list of all Tasks (the scheduler list)

/ / ...

};

class Displayed : public Link {

/ / the Link is used to maintain a list of all Displayed objects (the display list)

/ / ...

};

Link

Link

Task

Displayed

Satelite

slide39
Problem wielokrotnego dziedziczenia tej samej klasy bazowej rozwiązuje się poprzez stworzenie najwyższej klasy bazowej klasa wirtualną (virtual base class)
  • Popatrzmy na kod:
interpretacja graficzna
Interpretacja graficzna

Storable

Reciever

Transmitter

Radio