4 Oliokeskeisen ohjelmoinnin edut

Kuten laskuvarjohousut ja Pac-Man, OOP (oliokeskeinen ohjelmointi) sai alkunsa 1980-luvulla. Mutta toisin kuin trendikkäät muodit ja videopelihahmot, tämä ohjelmointimalli on yhä voimissaan näiden vuosien jälkeen.

OOP:sta on tullut olennainen osa ohjelmistokehitystä. Javan ja C++:n kaltaisten kielten yleistymisen ansiosta et voi kehittää ohjelmistoja mobiilikäyttöön, ellet ymmärrä oliosuuntautunutta lähestymistapaa. Sama pätee vakavasti otettavaan web-kehitykseen, kun otetaan huomioon Pythonin, PHP:n ja Rubyn kaltaisten OOP-kielten suosio.

Objektipainotteisen ohjelmoinnin idean ymmärtäminen voi olla haastavaa joillekin tietotekniikan ammattilaisille. Saatat miettiä, mihin objekteja edes tarvitaan, kun voit käyttää perinteisen strukturoidun ohjelmoinnin ylhäältä alaspäin suuntautuvaa lähestymistapaa Visual Basicin kaltaisissa kielissä.

Jos olet kirjoittanut tämäntyyppisiä ohjelmistoja, olet luultavasti tottunut pilkkomaan suuret ongelmat osaongelmiin ja ratkaisemaan ne erillisinä koodiyksikköinä. Tai sinulla saattaa olla kokemusta funktionaalisesta ohjelmoinnista, jossa koodin elementtejä kohdellaan täsmällisinä matemaattisina funktioina ja estetään niitä vaikuttamasta toisiin elementteihin, eli ei sivuvaikutuksia.

Käy kuitenkin käsiksi OOP:hen, ja huomaat, että se on aivan uusi tapa ratkaista ongelmia. Peruskonsepti on, että ohjelman kirjoittamisen sijaan luodaan luokka, joka on eräänlainen malli, joka sisältää muuttujia ja funktioita. Oliot ovat tuon luokan itsenäisiä instansseja, ja saat ne toimimaan vuorovaikutuksessa hauskoilla ja jännittävillä tavoilla.

Objektipainotteisen ohjelmoinnin edut piilevät tällaisessa kapseloinnissa. Tässä on yksityiskohtainen katsaus joihinkin OOP:n tärkeimpiin etuihin:

Modulaarisuus helpottaa vianetsintää

Joku on mennyt pieleen, etkä tiedä, mistä etsiä. Onko ongelma Widget-tiedostossa vai WhaleFlumperissa? Joudutko penkomaan sitä ”sewage.c”-tiedostoa? Toivottavasti olet kommentoinut koodisi!

Kun työskentelet oliopohjaisten ohjelmointikielten parissa, tiedät tarkalleen, mistä etsiä. ”Ai, auton objekti hajosi? Ongelman täytyy olla Car-luokassa!” Sinun ei tarvitse penkoa mitään muuta.

Se on kapseloinnin kauneus. Oliot ovat itsenäisiä, ja jokainen osa toiminnallisuutta tekee oman asiansa jättäen muut osat rauhaan. Lisäksi tämä modaliteetti mahdollistaa sen, että tietotekniikkatiimi voi työskennellä useiden objektien parissa samanaikaisesti ja minimoida samalla sen mahdollisuuden, että yksi henkilö kopioi jonkun toisen toiminnallisuuden.

Me voimme auttaa sinua löytämään seuraavan ohjelmointityösi:

Koodin uudelleenkäyttö periytymisen avulla

Esitettäkö, että Car-objektisi lisäksi yksi kollega tarvitsee RaceCar-objektin ja toinen Limousine-objektin. Jokainen rakentaa objektinsa erikseen, mutta löytää niiden välisiä yhtäläisyyksiä. Itse asiassa jokainen objekti on oikeastaan vain erilainen Car. Tässä kohtaa perintätekniikka säästää aikaa: Luodaan yksi geneerinen luokka (Car) ja määritellään sitten alaluokat (RaceCar ja Limousine), jotka perivät geneerisen luokan ominaisuudet.

Limousinella ja RaceCarilla on tietysti edelleen omat yksilölliset ominaisuutensa ja toimintonsa. Jos RaceCar-olio tarvitsee metodin ”fireAfterBurners” ja Limousine-olio tarvitsee autonkuljettajan, kumpikin luokka voisi toteuttaa erilliset funktiot vain itselleen. Koska molemmat luokat kuitenkin perivät Car-luokan keskeiset piirteet, esimerkiksi ”drive”- tai ”fillUpGas”-metodit, periytyvät luokkasi voivat yksinkertaisesti käyttää uudelleen olemassa olevaa koodia sen sijaan, että kirjoittaisit nämä funktiot kokonaan uudestaan.

Entä jos haluat tehdä muutoksen kaikkiin Car-objekteihin tyypistä riippumatta? Tämä on toinen OO-lähestymistavan etu. Tee vain muutos Car-luokkaasi, ja kaikki Car-objektit yksinkertaisesti perivät uuden koodin.

Joustavuutta polymorfismin avulla

Tämän esimerkin pohjalta tarvitset nyt vain muutamia ajureita eli funktioita, kuten ”driveCar”, ”driveRaceCar” ja ”DriveLimousine”. RaceCarDrivers jakavat joitakin piirteitä LimousineDriversin kanssa, mutta toiset asiat, kuten RaceHelmets ja BeverageSponsorships, ovat ainutlaatuisia.

Tässä kohtaa tulee kuvaan mukaan olio-ohjelmoinnin suloinen polymorfismi. Koska yksittäinen funktio voi muuttaa muotoaan niin, että se mukautuu sen luokan mukaan, jossa se on, voit luoda kantaluokkaan Car yhden funktion nimeltä ”drive” – ei ”driveCar” tai ”driveRaceCar”, vaan vain ”drive”. Tämä yksi funktio toimisi RaceCarDriverin, LimousineDriverin jne. kanssa. Itse asiassa voisi olla jopa ”raceCar.drive(myRaceCarDriver)” tai ”limo.drive(myChauffeur).”

Tehokas ongelmanratkaisu

C:n kaltaisella kielellä on uskomaton perintö ohjelmoinnin historiassa, mutta ohjelmiston kirjoittaminen ylhäältä alaspäin suuntautuvalla ohjelmointikielellä on kuin leikkisi Jengaa lapaset jalassa. Mitä monimutkaisemmaksi siitä tulee, sitä suurempi on mahdollisuus, että se romahtaa. Samaan aikaan funktionaalisen tyylisen ohjelman kirjoittaminen Haskellin tai ML:n kaltaisella kielellä voi olla työlästä.

Objektipainotteinen ohjelmointi on usein luonnollisin ja käytännöllisin lähestymistapa, kunhan sen oppii hallitsemaan. OOP-kielten avulla voit pilkkoa ohjelmasi pieniksi ongelmiksi, jotka voit sitten ratkaista – yksi objekti kerrallaan.

Tämä ei tarkoita, että OOP olisi ainoa oikea tapa. Oliopohjaisen ohjelmoinnin edut ovat kuitenkin monet. Kun sinun on ratkaistava monimutkaisia ohjelmointihaasteita ja haluat lisätä koodityökaluja taitoihisi, OOP on ystäväsi – ja se on paljon pitkäikäisempi ja hyödyllisempi kuin Pac-Man tai laskuvarjohousut.

Vastaa

Sähköpostiosoitettasi ei julkaista.