Oliopohjaisen ohjelmoinnin neljä pilaria
On 27 syyskuun, 2021 by adminTässä blogissa selitän OOP:n neljä pilaria ja annan pieniä esimerkkejä. Tarpeeksi pieniä esimerkkejä, jotka sinä ja minä voimme helposti ymmärtää.
Abstraktio on lähinnä ”need to know”. Piilotamme tärkeimmät toteutuksen yksityiskohdat ja pidämme samalla ilmeisen käytön etualalla. Muista siis tämä ”piilota yksityiskohdat, näytä relevanssi”.
Abstraktioesimerkki…
Tämä on rekisteröintilomake sovelluksessa, jonka parissa työskentelen (relevanssi).
Tämä on lomakkeen lähettämisen toteutuslogiikka. (tarpeellisuus).
Polymorfismi
Polymorfismi on sitä, että kun käytetään yhtä koodilohkoa, vaihdetaan käytettävän koodin versiota sille annettavien syötteiden perusteella. Jotta asia olisi hieman selkeämpi, eri luokkia voidaan käyttää samalla rajapinnalla, mutta ne voivat tarjota oman toteutuksensa kyseisestä rajapinnasta.
Polymorfismi-esimerkki…
class Animal { speak = () => console.log('makes sound')}class Dog extends Animal { speak = () => console.log('woof')}class Cat extends Animal { speak = () => console.log('meowww')}class Cow extends Animal { speak = () => console.log('moooooo')}let dog1 = new Dog()let cat1 = new Cat()let cow1 = new Cow()dog1.speak() // => woofcat1.speak() // => meowwwcow1.speak() // => moooooo
Luokat Cat (Kissa), Dog (Koira) ja Cow (Lehmä) periytyvät luokasta Animal (Eläin). Näin Cat-, Dog- ja Cow-luokka voivat käyttää Animal-luokan käyttöliittymää. Niillä on kuitenkin käytössään vain speak-metodi. Jos jättäisimme speak-metodin pois Cat-, Dog- ja Cow-luokasta ja sitten loisimme Cat-, Dog- ja Cow-luokan instansseja, voisimme silti kutsua speak-metodia näissä instansseissa. Ainoa ongelma on, että se tulostaisi Animals ’makes sound’ (Eläimet ’tekee äänen’) sen sijaan, että se tulostaisi sopivat äänet, joita Kissa, Koira ja Lehmä tekevät (’meow’, ’woof’, ’moo’).
Tässä kohtaa metodin ohittaminen tulee kuvaan. Jos määrittelemme speak-metodin uudelleen Cat-, Dog- ja Cow-luokissa, voimme mukauttaa sen tulostamaan kissojen ja koirien äänet.
Kapselointi
Kapselointi sitoo yhteen datan ja dataa käsittelevät funktiot, mikä pitää molemmat turvassa ulkopuolisilta häiriöiltä ja väärinkäytöltä. Hyvä esimerkki kapseloinnista on luokka. Voimme itse asiassa palata yllä olevaan esimerkkiin, jossa puhumme koirista, kissoista ja lehmistä pienin muutoksin.
class Dog { constructor(name) { this.name = name } printName = () => console.log(this.name)}class Cat { constructor(name) { this.name = name } printName = () => console.log(this.name)}class Cow { constructor(name) { this.name = name } printName = () => console.log(this.name)}let dog1 = new Dog()dog1.name = "Max"dog1.printName() // => Maxlet cat1 = new Cat()cat1.name = "Mark"cat1.printName() // => Marklet cow1 = new Cow()cow1.name = "Tom"cow1.printName() // => Tom
Huomaa, että luodessamme kullekin eläimelle instansseja annamme kullekin eläimelle myös nimen. Tässä on huomioitava, että jokaisen luodun instanssin perässä oleva ’.nimi’ (esim. koira1.nimi) on kaikilla erilainen. Nuo ’.name’t on koteloitu omiin luokkiinsa. Nimen antaminen instanssille ei muuta minkään muun instanssin nimiarvoa.
Perinnöllisyys
Perinnöllisyys on luultavasti helpoin ymmärtää. Perinnöllisyys on käsite, jossa yksi luokka käyttää(perii) toisen luokan rajapintaa. Tällöin siitä tulee lapsi- tai aliluokka, kun taas luokka, josta se perii, on vanhempi tai yläluokka. Me itse asiassa periytimme jonkin verran edellä olevassa toisessa esimerkissä. Kissa-, koira- ja lehmäluokka periytyy Animal-luokasta saadakseen käyttöönsä speak-metodin. Varmista vain, että lisäät extends-avainsanan.
Vastaa