Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Johdetun luokan määrittely tMyn1 Johdetun luokan määrittely Kun johdettu luokka periytetään kantaluokasta, saadaan kantaluokan jäsenet enemmän tai vähemmän.

Samankaltaiset esitykset


Esitys aiheesta: "Johdetun luokan määrittely tMyn1 Johdetun luokan määrittely Kun johdettu luokka periytetään kantaluokasta, saadaan kantaluokan jäsenet enemmän tai vähemmän."— Esityksen transkriptio:

1 Johdetun luokan määrittely tMyn1 Johdetun luokan määrittely Kun johdettu luokka periytetään kantaluokasta, saadaan kantaluokan jäsenet enemmän tai vähemmän johdetun luokan käyttöön. Kantaluokan jäsenen näkyvyys määritellään tyypillisesti joko private -, protected - tai public -saantimääreellä. Käsitellään varatut sanat final ja abstract erikseen tämän kappaleen lopussa. Muodostetaan taulukko, josta käy ilmi näkyvyyssäännön vaikutus, kuva 1.

2 Johdetun luokan määrittely tMyn2 kantaluokka jäsenen näkyvyyssääntö: public jäsenet protected jäsenet private jäsenet näkyvyys johdetussa luokassa: johdettu luokka public protected periytyy, mutta ei ole käytettävissä Kuva 1. Näkyvyyssäännön vaikutus.

3 Johdetun luokan määrittely tMyn3 Perintä (inheritance) kantaluokasta määritellään varatulla sanalla extends, jossa kantaluokan ominaisuudet ja metodit peritään johdettuun luokkaan. Johdetun luokan muodostinta toteutettaessa on muistettava, että sen rungossa pitää ensimmäiseksi kutsua kantaluokan muodostinta, jotta kaikki perityt tietojäsenet saavat halutun/vaaditun alustuksen. Kantaluokan muodostimen kutsumisessa johdetun luokan muodostimesta käytetään varattua sanaa parent ja näkyvyysoperaattoria :: (scope resolution operator).

4 Johdetun luokan määrittely tMyn4 Kuvasta 1 nähdään, että kantaluokan private - saantimääreellä esitelty jäsen pysyy private - tyyppisenä kantaluokalle. Käytännössä tämä tarkoittaa sitä, että private -tyyppiset kantaluokan jäsenet ovat private -tyyppisiä myös johdetulle luokalle. Tästä seuraa, että kantaluokan private - tyyppiset tietojäsenet eivät ole käytettävissä johdetun luokan jäsenfunktioille. Niitä voi siis käyttää ainoastaan määrittelemällä kantaluokkaan public - saantimääreellä jäsenfunktio. Tarkastellaan näitä asioita seuraavassa esimerkissä:

5 Johdetun luokan määrittely tMyn5

6 Johdetun luokan määrittely tMyn6

7 Johdetun luokan määrittely tMyn7

8 Johdetun luokan määrittely tMyn8

9 Johdetun luokan määrittely tMyn9 Sitä vastoin jos kantaluokassa on public -tyyppinen jäsenfunktio, niin sitä voidaan käyttää johdetussa luokassa (esimerkiksi) kaiuttamaan näytölle kantaluokalta perityt private -tyyppiset tietojäsenet. Muilta osin kaikki on saman tyyppisesti kuin mitä edellisessä esimerkissä:

10 Johdetun luokan määrittely tMyn10

11 Johdetun luokan määrittely tMyn11

12 Johdetun luokan määrittely tMyn12

13 Johdetun luokan määrittely tMyn13

14 Johdetun luokan määrittely tMyn14 Jos kantaluokan jäsenen saantimääreenä on public tai protected, niin silloin johdetulle luokalle periytetty tietojäsen on myös tämän johdetun luokan jäsenfunktion käytettävissä. Tiedon piilottamisen periaatteen mukaisesti kantaluokan tietojäsenten ei tulisi koskaan olla public -tyyppisiä. Tehdään alkuperäiseen esimerkkiin se muutos, että asetetaan kantaluokan tietojäsenet protected - tyyppiseksi, muuten koodi on sama kuin ensimmäisessä esimerkissä:

15 Johdetun luokan määrittely tMyn15

16 Johdetun luokan määrittely tMyn16

17 Johdetun luokan määrittely tMyn17

18 Johdetun luokan määrittely tMyn18

19 Johdetun luokan määrittely tMyn19 Nyt kun kantaluokan tietojäsenet ovat protected - tyyppisiä, voidaan tehdä seuraava muutos: korvataan (redefinition) kantaluokan jäsenfunktio sopivammalla toteutuksella johdetussa luokassa, siis sekä kantaluokassa että johdetussa luokassa on otsikkotiedoiltaan identtinen jäsenfunktio:

20 Johdetun luokan määrittely tMyn20

21 Johdetun luokan määrittely tMyn21

22 Johdetun luokan määrittely tMyn22

23 Johdetun luokan määrittely tMyn23

24 Johdetun luokan määrittely tMyn24 Korvaamisessa (redefining) on se vaatimus, että johdetun luokan kohdalla korvattavan funktion otsikkotiedot on oltava täsmälleen samat kuin kantaluokassa. Siis kun kantaluokassa jäsenfunktion saantimääreenä on public, niin sen pitää olla public myös johdetussa luokassa (jossa sen toteutus on tarkoitus korvata). Tehdään edelliseen esimerkkiin vain tämä saantimääremuutos johdettuun luokkaan:

25 Johdetun luokan määrittely tMyn25

26 Johdetun luokan määrittely tMyn26

27 Johdetun luokan määrittely tMyn27

28 Johdetun luokan määrittely tMyn28 Leikitellään vielä hetki saantimääreellä protected. Jos kantaluokan jäsenfunktion saantimääreenä on protected, niin se tarkoittaa sitä, että sitä voi kutsua saman luokan toinen jäsenfunktio tai johdetun luokan jäsenfunktio – eivät ketkään muut. Sitä ei siis voi kutsua luokan ulkopuolelta. Siinä mielessä varattu sana protected on yhtä vahva kuin varattu sana private :

29 Johdetun luokan määrittely tMyn29

30 Johdetun luokan määrittely tMyn30

31 Johdetun luokan määrittely tMyn31

32 Johdetun luokan määrittely tMyn32

33 Johdetun luokan määrittely tMyn33 Mutta voihan sitä kutsua toinen jäsenfunktio, seuraavassa esimerkissä johdetun luokan jäsenfunktio – käytetään täsmälleen äskeistä esimerkkiä kommentoimalla kaksi riviä. Viittaaminen kantaluokan jäsenfunktioon onnistuisi myös käyttämällä varattua sanaa parent::, mutta nyt käytetään kantaluokan nimeä:

34 Johdetun luokan määrittely tMyn34

35 Johdetun luokan määrittely tMyn35

36 Johdetun luokan määrittely tMyn36 Harvemmin (?) käytetty saantimääre on final. Tämä saantimääre jäsenfunktion kohdalla tarkoittaa sitä, että kyseistä jäsenfunktiota ei voida korvata (override) johdetussa luokassa:

37 Johdetun luokan määrittely tMyn37

38 Johdetun luokan määrittely tMyn38

39 Johdetun luokan määrittely tMyn39

40 Johdetun luokan määrittely tMyn40

41 Johdetun luokan määrittely tMyn41 Jos käyttäisi final -saantimäärettä luokan kohdalla, niin se tarkoittaisi sitä, että kyseistä luokkaa ei pystyisi periyttämään. Pidetään siis edellinen esimerkki muuten täsmälleen samana, mutta siirretään varattu sana final luokan Henkilo kohdalle:

42 Johdetun luokan määrittely tMyn42

43 Johdetun luokan määrittely tMyn43

44 Johdetun luokan määrittely tMyn44 Joskus ohjelmoija voi olla sitä mieltä, että johonkin luokkaan ei saa luoda (instantioida) lainkaan olioita. Tällaista toimintaa varten on olemassa varattu sana abstract. Tehdään esimerkki, jossa kantaluokka määritellään abstract -tyyppiseksi. Jos luokka on abstract -tyyppinen ja sillä on tietojäseniä, niin silloin ilman muuta pitää toteuttaa tähän kyseiseen abstraktiin luokkaan muodostin, jotta toiminta on oikeellista siinä vaiheessa kun tästä abstraktista kantaluokasta johdettuun luokkaan luodaan olio.

45 Johdetun luokan määrittely tMyn45 Edelleen on myös mahdollista toteuttaa abstraktiin luokkaan jäsenfunktioita, vaikka eipä siinä taida olla paljoakaan järkeä: eihän kyseiseen luokkaan voi luoda olioita, joten kukapa näitä abstraktin luokan jäsenfunktioiden toteutuksia tarvitsisi!:

46 Johdetun luokan määrittely tMyn46

47 Johdetun luokan määrittely tMyn47

48 Johdetun luokan määrittely tMyn48

49 Johdetun luokan määrittely tMyn49

50 Johdetun luokan määrittely tMyn50 Edellinen esimerkki alkaa toimimaan, kun kommentoidaan ne rivit, joissa yritetään luoda kantaluokkaan olio:

51 Johdetun luokan määrittely tMyn51

52 Johdetun luokan määrittely tMyn52

53 Johdetun luokan määrittely tMyn53 Jos halutaan luoda abstrakti luokka, niin silloin lienee luontevinta, että samaisen luokan tavalliset jäsenfunktiot ovat myöskin abstrakteja – jos ylipäänsä haluaa sisällyttää kyseiseen luokkaan muita jäsenfunktioita kuin mahdollisesti muodostin (koska niitä tietojäseniä varmaankin on tyypillisesti abstraktillakin luokalla). Toisin päin on näin: jos sisällyttää luokkaan abstraktin jäsenfunktion, niin sitten on pakko nimetä myös kyseinen luokka abstraktiksi. Huom! Abstrakti jäsenfunktio ei saa sisältää runkoa, ei edes aaltosulkeita rungon kohdalla:

54 Johdetun luokan määrittely tMyn54

55 Johdetun luokan määrittely tMyn55

56 Johdetun luokan määrittely tMyn56

57 Johdetun luokan määrittely tMyn57 Muutetaan edellinen esimerkki toimimaan: abstraktilla kantaluokalla on yksi abstrakti jäsenfunktio. Tehdään tälle abstraktille jäsenfunktiolle kelvollinen toteutus johdetussa luokassa:

58 Johdetun luokan määrittely tMyn58

59 Johdetun luokan määrittely tMyn59

60 Johdetun luokan määrittely tMyn60


Lataa ppt "Johdetun luokan määrittely tMyn1 Johdetun luokan määrittely Kun johdettu luokka periytetään kantaluokasta, saadaan kantaluokan jäsenet enemmän tai vähemmän."

Samankaltaiset esitykset


Iklan oleh Google