Olio-ohjelmointi

Oliopohjainen ohjelmointi (OOP) on tapa kirjoittaa tietokoneohjelmia, jossa käytetään "objektien" ideaa tietojen ja menetelmien esittämiseen. Tavallisesti tietokoneohjelmat olivat vain luettelo tietokoneelle annetuista ohjeista, jotka käskivät tietokonetta tekemään tietyt asiat tietyllä tavalla, mitä kutsutaan proseduraaliseksi ohjelmoinniksi. Oliokeskeisessä ohjelmoinnissa tietokoneohjelmat käyttävät kuitenkin objekteja, jotka keskustelevat keskenään ja muuttavat objektien tietoja, jotta ne toimisivat käyttäjän haluamalla tavalla. Lisäksi oliokeskeisen ohjelmoinnin suunnittelutapa auttaa kehittäjää, sillä sen avulla koodia voidaan helposti käyttää uudelleen ohjelman muissa osissa tai jopa muiden ihmisten toimesta.

Useimmat ohjelmointikielet ovat sekoitus erilaisia tapoja kirjoittaa tietokoneohjelmia. Esimerkiksi Pythonissa tietokoneohjelmia voidaan kirjoittaa sekä olio- että proseduraalisesti. On olemassa monia ohjelmointikieliä, joiden avulla tietokoneohjelmia voi kirjoittaa OOP:lla, Joitakin tällaisia ohjelmointikieliä ovat esimerkiksi: C++, Java, Ruby, Perl, Emarald, Sapphire, PHP, Python jne.

Ominaisuudet

Oliopohjaisen ohjelmoinnin perusajatuksena on, että kaikki on objekteja. Objektit voivat kuitenkin olla erityyppisiä:

  • Muuttujiin voidaan tallentaa erityyppisiä tietoja (tai dataa), joita ohjelmointikieli tukee. Esimerkkejä ovat kokonaislukutietotyyppi ja listojen tietorakenne. Muuttujien idea on jo olemassa proseduraalisista ohjelmointikielistä. Oliokeskeisessä ohjelmoinnissa muuttujat tunnetaan pääasiassa attribuutteina.
  • Proseduurit (tunnetaan myös nimellä funktiot, menetelmät tai rutiinit) ovat luettelo ohjeista, jotka käskevät tietokonetta ottamaan syötteen, suorittamaan joitakin laskutoimituksia tai muuttamaan tietoja ja palauttamaan tulosteen käyttäjälle. Proseduurit ovat myös ajatus, joka on jo saatavilla proseduraalisista ohjelmointikielistä. Oliosuuntautuneessa ohjelmoinnissa proseduurit tunnetaan pääasiassa metodeina.
  • Luokat ovat kokoelma erilaisia muuttujia ja proseduureja. Luokat keskustelevat yleensä keskenään, jotta tietoihin voidaan tehdä muutoksia käyttäjän haluamalla tavalla.

Objektit on termi, jota käytetään viittaamaan luokkien instansseihin.

Esimerkkejä

Alla olevissa esimerkeissä luodaan luokka nimeltä Human. Tämä luokka sisältää attribuutit name (henkilön nimi) ja friend (ystävän nimi). Jokainen Human-luokan metodi sisältää luettelon ohjeista, joissa käytetään sekä name- että friend-attribuutteja.

Python

Tämä koodi on Python-kielellä.

class Human(object): def __init__(self, name, friend=None): self. name = name self. friend = friend def say_name(self): print("Nimeni on "+self. name) def say_goodnight(self): if self. friend is None: print("Hyvää yötä kukaan.") else: print("Hyvää yötä "+self. friend. name) # Luo uusi ihmisobjekti nimeltä stephen, jonka nimi on "Stephen" stephen = Human("Stephen") # Luo uusi ihmisobjekti nimeltä joe, jonka nimi on "Joe" ja jonka ystävä on stephen joe = Human("Joe", stephen) stephen. say_name() # Näyttää 'Nimeni on Stephen' stephen. say_goodnight() # Näyttää 'Hyvää yötä ei kenellekään.' joe. say_name() # Näyttää 'Nimeni on Joe' joe. say_goodnight() # Näyttää 'Hyvää yötä Stephenille.'

Java

Tämä koodi on Java-kielellä.

Ihmisluokka

class Human { private String name = "nimetön"; // tämän ihmisen nimi private Human friend = null; // ihmisen ystävä // Tämä metodi luo uuden ihmisen, kun sille annetaan nimi ja ystävä public Human(String name, Human friend) { this. name = name; this. friend = friend; }      // Tämä metodi luo myös uuden Human-olion, kun annetaan vain nimi public Human(String name) { this. name = nimi; this. friend = null; }      // Tämä metodi luo uuden Human-olion, kun ei anneta sekä nimeä että ystävää public Human() { this. name = "nimetön"; this. friend = null; } public void sayName() { System. out. println("Nimeni on " + this. name); } public void sayGoodnight() { if (ystävä == null) { System. out. println("Hyvää yötä, ei ketään."); } else { System. out. println("Hyvää yötä " + ystävä. name); }     } }

Menetelmä, jolla puhutaan yllä olevalle Human-luokalle

class Main { public static void main(String[] args) { // Luo uusi ihmisobjekti stephen, jonka nimi on "Stephen" Human stephen = new Human("Stephen"); // Luo uusi ihmisobjekti joe, jonka nimi on "Joe" ja jonka ystävä on stephen Human joe = new Human("Joe", stephen); stephen. sayName(); // Näyttää 'Nimeni on Stephen' stephen. sayGoodnight(); // Näyttää 'Hyvää yötä kukaan.' joe. sayName(); // Näyttää 'Nimeni on Joe' joe. sayGoodnight(); // Näyttää 'Hyvää yötä Stephen' } }

Kritiikki

Vaikka oliokeskeinen ohjelmointi on suosittua, monet ihmiset pitävät sitä huonona ja arvostelevat sitä.

  • Luca Cardelli kirjoitti artikkelin "Bad Engineering Properties of Object-Oriented Languages".
  • Richard Stallman kirjoitti vuonna 1995: "OOP:n lisääminen Emacsiin ei ole selkeä parannus; käytin OOP:tä työskennellessäni Lisp Machine -ikkunajärjestelmien parissa, ja olen eri mieltä tavanomaisesta näkemyksestä, jonka mukaan se on parempi tapa ohjelmoida."
  • Potokin ja muiden tekemän tutkimuksen mukaan OOP- ja proseduraalisten lähestymistapojen tuottavuusero on hyvin pieni.
  • Christopher J. Date sanoi, että OOP:n vertaaminen muihin asioihin, erityisesti siihen, miten OOP ja toinen asia liittyvät toisiinsa, on vaikeaa, koska ihmiset eivät ole yhtä mieltä OOP:n merkityksestä.
  • Alexander Stepanov ehdotti, että OOP antaa näkökulman, joka on rajallinen matematiikan osalta, ja kutsui sitä "melkein yhtä suureksi huijaukseksi kuin tekoälyä".
  • Paul Graham, menestynyt internet-myyjä ja ohjelmoija, on ehdottanut, että OOP:n tarkoitus on toimia paimennusmekanismina, joka estää keskiverto-ohjelmoijia keskivertojärjestöissä tekemästä "liikaa vahinkoa". Tämä hidastaa myös nopeampia ja parempia ohjelmoijia, jotka osaavat tehdä asioita tehokkaammin ja kompaktimmin. [1]

Kysymyksiä ja vastauksia

K: Mitä on objektikeskeinen ohjelmointi?


V: Oliopohjainen ohjelmointi on tapa kirjoittaa tietokoneohjelmia käyttämällä "objekteja" datan ja metodien kuvaamiseen.

K: Miten olio-ohjelmointi eroaa proseduraalisesta ohjelmoinnista?


V: Proseduraalisessa ohjelmoinnissa tietokoneohjelmat ovat luettelo tietokoneelle annettavista ohjeista, jotka käskevät tietokonetta tekemään tietyt asiat tietyllä tavalla. Oliokeskeisessä ohjelmoinnissa tietokoneohjelmat käyttävät objekteja, jotka keskustelevat keskenään muuttaakseen objektien tietoja ja toimiakseen käyttäjän haluamalla tavalla.

K: Miten oliokeskeinen ohjelmointi hyödyttää kehittäjiä?


V: Oliosuuntautunut ohjelmointi mahdollistaa sen, että koodia voidaan helposti käyttää uudelleen ohjelman muissa osissa tai jopa muiden ihmisten toimesta.

K: Mistä Python-ohjelmointikieli tunnetaan?


V: Python mahdollistaa tietokoneohjelmien kirjoittamisen sekä olio- että proseduraalisella ohjelmoinnilla.

K: Voitko antaa esimerkkejä ohjelmointikielistä, joiden avulla tietokoneohjelmia voi kirjoittaa oliosuuntautuneessa ohjelmoinnissa?


V: Ohjelmointikieliä, joilla voi kirjoittaa tietokoneohjelmia olio-ohjelmoinnilla, ovat esimerkiksi C++, Java, Ruby, Perl, Emarald, Sapphire, PHP, Python ja C#.

K: Mitä objektit ovat objektikeskeisessä ohjelmoinnissa?


V: Oliot ovat oliokeskeisessä ohjelmoinnissa kokonaisuuksia, jotka sisältävät dataa ja metodeja.

K: Miten objektit toimivat olio-ohjelmoinnissa?


V: Oliot ovat vuorovaikutuksessa toistensa kanssa muuttaakseen kyseisissä olioissa olevia tietoja ja toimiakseen käyttäjän haluamalla tavalla.

AlegsaOnline.com - 2020 / 2023 - License CC3