Olio-ohjelmointi

Saku-foorumi » Yleinen keskustelu » Viestit 2005 » Viestit 12/2005 asti » Olio-ohjelmointi « Edellinen Seuraava »

Kirjoittaja Viesti
 

Patte
Keskiviikkona, 10. elokuuta, 2005 - klo 16.47:   
Moi!

Mitä mieltä täällä on konkarit olio-kielistä ja olioista ylipäätänsä, onko taas kerran menty vauhdilla metsään vai kohti jotain oikeasti hienoa?!

 

JPQ
Keskiviikkona, 10. elokuuta, 2005 - klo 17.18:   
Pidän itseäni aika moisena konkarina (koodannut todella kauan jo) ja
sanon oliot ok jossain jutuissa mutta joskus koodissa tärkeämpikin
arvoja kuten nopeus. Vaikka olenkin itse vanhakantainen eli C mies
käytännössä.

 

Tomi
Keskiviikkona, 10. elokuuta, 2005 - klo 17.21:   
Haukotus, ei aiheelle vaan itselleni.
Onhan olio-ohjelmointi ihan virallinen oppiaine ammattikorkeakoulussakin, joten kai se on hyödyllistä ja tuottavaa.
Itse tutustuin aiheeseen joskus tziljoona vuotta sitten ostamalla SmallTalkista kertovan kirjan. Mutta kyllä oli eksoottista, jopa liian eksoottista. Parempi, että en aloita tässä määrittelemään, mitä se on ja ei ole. Ainakin omasta mielestäni C++ ei varsinaisesti ole oliokieli ja Päivi Hietasen C++ ja olio-ohjelmointi on oppikirjana aivan hirveä...

Muistelen lämmöllä Vic20 prosessoria, jonka ohjelmointi oli niin simppeliä :) Akku, X ja Y rekisteri ja muisti. 6509 sen numero oli Commodore 64:ssä oli joku sen seuraaja. Ja nyt on tämä Commodore One. Mutta eksyn aiheesta yhä pahemmin, joten paree lopettaa.

 

Jon
Keskiviikkona, 10. elokuuta, 2005 - klo 17.39:   
Oliot on jees. Harmittaa kun ei ole aikaa perehtyä esim. SmallTalkiin tai Pythoniin. Java on tuttu tietysti, mutta Amiga-näkökulmasta sillä ei ole juuri käyttöä ole :(

C++ on itselle ehdoton valinta jos isompi projekti tulee eteen. Komentorivityökalut yms. on luontevaa naputella ihan C:llä.

 

itix
Keskiviikkona, 10. elokuuta, 2005 - klo 19.37:   
Olio-ohjelmointi on kätevää mutta omalta osaltani oliot rajoittuvat MUI-olioihin. Soodit naputtelen C:llä.

 

Palle
Keskiviikkona, 10. elokuuta, 2005 - klo 20.00:   
Kyllä tuo olio-ohjelmointi (ja UML) on tullut jäädäkseen, nykyään käytetään jopa sulautettujen järjestelmien ohjelmistoissa(C++), jotka viime vuosituhannen vaihteeseen asti tehtiin melkeinpä poikkeuksetta C:llä ja/tai assemblyllä.

Töissä on viimeset 4 vuotta tullut väännettyä olio-pohjaista koodia C++:lla. Ei kait sitä enää varmaan muuten osaisi koodatakkaan :)

 

JPQ
Keskiviikkona, 10. elokuuta, 2005 - klo 20.13:   
Tomi: tuo mainittu c++ kirja lienee vielä ok jos se on se mikä
meidänkin kirjastossa on mutta eräät muut suomalaiset esim. itpressin
teokset on sellaisia että paras jättää sanomatta etten tule bannatuksi
todella rumina pidettyjen sanojen käytön takia.
PS. sanan rumuus on minusta kiinni siitä mihin käyttää ja joskus
siitäkin miltä sana kuulostaa.

 

Jupp3
Keskiviikkona, 10. elokuuta, 2005 - klo 20.34:   
Omasta mielestäni olio-ohjelmointi on enemmän kiinni ohjelmoijan asenteesta kuin käytetystä ohjelmointikielestä.

Mikähän nyt onkaan "virallinen määritelmä", mutta usein kuulee puhuttavan mm. seuraavista ominaisuuksista:
-Uudelleenkäytettät ohjelmamodulit
Suurin osa ohjelmointikielistä tukee vähintään aliohjelmia, useat (ainakin C, C++, AMOS ja assembler) mahdollistavat argumenttien ja palautusarvojen käytön (tavalla tai toisella)

-Dynaaminen muistinvaraus
Myös toteutettavissa lähes millä tahansa ohjelmointikielillä. Se, kuinka "valmis" ratkaisu kielestä löytyy tietenkin vaihtelee (ja se, kuinka sitä käytetään)

-Modulien välinen viestinvälitys
Monesti on parempi käyttää käyttöjärjestelmän omaa viestinvälitystä

Joidenkin ominaisuuksien toteuttaminen (esim. dynaaminen muistinvaraus) saattaa tietenkin olla työläämpää kuin valmiin ratkaisun käyttäminen.

 

Jani Kuituniemi
Keskiviikkona, 10. elokuuta, 2005 - klo 20.58:   
Oma kantani on, että en ole vielä tähään päivään mennessä (15+ vuotta ohjelmointia takana tusinalla kielellä) keksinyt mikä hyöty olioista oikein on. Tähän asti kaikkeen käyttöön on riittänyt tavanomaiset ohjelmointi-tekniikat. Ovathan oliot ihan "käteviä" joihinkin asioihin, mutta hyödyllisyydestä, puhumattakaan välttämättömyydestä, voidaan olla n+1 mieltä.

 

Frn
Torstaina, 11. elokuuta, 2005 - klo 0.39:   
Jupp3: Mitkään noista ominaisuuksista ei ole olioparadigmalle spesifisiä, kuten olet kommenteissasi huomannutkin. Eivätkä toivottavasti missään esitettyjä määritelmiä. Toki monissa oliokielissä näitä ominaisuuksia on mukana, mutta niin myös monissa ei-oliokielissä.

Monessa asiassa oliot ovat hyvinkin käteviä. Erityisesti lähes kaikissa reaalimaailmaa mallintavissa ohjelmissa niistä on todellakin hyötyä. Harvemmin niistä haittaa on, mutta hyöty voi olla täysin olematon joissain tilanteissa. Olioiden suorituskykyongelmat on useimmiten pelkkää urbaanilegendaa. Jos sellaista ilmenee, tämä yleensä voidaan pistää taitamattomuuden/kokemattomuuden piikkiin. Tämä harhaluulo johtunee eräiden oliokielien tulkattavuudesta.

Itse olen sitä mieltä, että oliot ovat pop. Eivät tietysti kaikkiin tarkoitukseen järkeviä käyttää, mutta tuskin mikään ohjelmistoteknologia kaikkeen sopii. Esimerkiksi C(++) on hyvin harvaan projektiin optimaalisin ratkaisu, mutta koska se on erittäin moniin projekteihin "toiseksi paras", siitä on muodostunut yleiskäyttöinen kieli.

Oliot saattavat asua metsässä, mutta oliomallin kanssa ollaan menty kyllä kohti uusia mahdollisuuksia vai mitenkähän tämän muotoilisi? Tasaisin väliajoin hypetetään jotakin mullistavaa ohjelmistotekniikkaa, jonka pitäisi pelastaa maailma. Esimerkkinä oliot, ei pelastanut. Java, ei pelastanut... jatka listaa kumpaan suuntaan tahdot. :)

 

itix
Torstaina, 11. elokuuta, 2005 - klo 1.39:   
"Monessa asiassa oliot ovat hyvinkin käteviä."

Mun mielestä oliot ovat kätevïä kun joku muu käsittelee koodia. Normaalissa C-koodissa funktiot ja muuttujat voivat olla hujan hajan ympäri tekstitiedostoa. C++:ssa metodit ja muuttujat kerätään yhteen paikkaan luokkamäärittelyyn. Olioilla on myös con/destructorit joita on helppo muuttaa (vrt. tyypilliset create_xyz()/delete_xyz() viritykset).

"Itse olen sitä mieltä, että oliot ovat pop. Eivät tietysti kaikkiin tarkoitukseen järkeviä käyttää, mutta tuskin mikään ohjelmistoteknologia kaikkeen sopii."

Perintä on hyödyllinen ominaisuus. Varsinkin silloin kun alkuperäistä koodia ei voi muuttaa (esim. juuri MUI:ssa omien widgettien tekeminen).

Javassa oliot taas menevät äärimmäisyyksiin ja jossain vaiheessa alkavat hidastamaan koodausta kun kaikkeen pitää tehdä oma olio. Tuntuu, että Java on suunnattu poropeukaloille kun koodaaja ei saa tehdä mitä haluaa ;) Muutoin Java on kyllä nautinto ja mielestäni parempi kuin Bournstroupin aivopieru :)

 

The Real J.
Torstaina, 11. elokuuta, 2005 - klo 8.13:   
Frn: Muistaakseni pari olio-ohjelmoinnin määritettä oli:

1. Tiedon ja sitä käsittelevien funktioiden kotelointi yhdeksi tiiviiksi kokonaisuudeksi. Jokaisella oliolla voi olla sekä julkisia että salaisia attribuutteja samoin kuin julkisia funktioita ja salaisia funktioita.

2. Periytyminen. Eli voidaan määritellä yksi kantaluokka jolla on tietyt perusominaisuudet ja määritellä siitä johdettuja alaluokkia. Esimerkiksi kantaluokkana voisi olla huonekalu ja alaluokkina eri tyyppisiä huonekaluja (tuoli, pöytä, sänky, yms).

Yksi esimerkki olio-ohjelmoinnin ja perinteisen ohjelmoinnin erosta voisi olla vaikka huone jossa on joukko huonekaluja. Perinteisessä ohjelmoinnissa tarvittaisiin liuta taulukoita huonekalujen tiedoille (sijainti, asento, väri, yms) ja huonekaluihin kohdistuvat muutokset tehtäisiin taulukoihin. Tai vaihtoehtoisesti tietorakenne joka sisältää kaikki huonekalun tiedot ja määritellään taulukko tätä tyyppiä. Olio-ohjelmoinnissa muutokset huoneeseen kohdistettaisiin suoraan huonekaluihin, esimerkiksi komentamalla tiettyä tuolia siirtymään paikkaan x1,y1. Toteutus voisi olla esimerkiksi siis:

Perinteinen: Furniture[n].x = x1; Furniture[n].y = y1;

Olio: Furniture[n].Moveto(x1,y1);

 

Marq
Torstaina, 11. elokuuta, 2005 - klo 10.30:   
Itse olen pudonnut vähän perinteiseen sudenkuoppaan, eli osaan C:tä niin monen vuoden ajalta, että C++:n täysipainoinen hyödyntäminen on hankalaa. Oman ajattelun ja koodailutarpeen tasolle C on ollut varsin sopiva. Oliomalli sinänsä on hieno juttu, mutten ole todellakaan kovin vakuuttunut siitä, että Bjarnen viritelmä edustaa sitä järin hyvin: C++:aan on kerätty roskakorin tavoin hieman hätäisesti kaikki mahdolliset oliopiirteet ja niinpä suuri osa feetsuista on aika hyödyttömiä (juu, eihän niitä ole pakko käyttää).

Javan kanssa meni hermot liiallisen oliopedanttisuuden takia: yksinkertaisenkin asian tekemiseksi piti tonkia ees taas dokumentaatiota turhan kauan, kun vaikka integerin ja intin keskenään vaihtelu tuntui olevan suuri synti...

 

KimmoK
Torstaina, 11. elokuuta, 2005 - klo 13.10:   
Fleecyn Safe C tai sheep ois varmaan kaikkein paras! HEEHEh!

Itsekin olen liikaa koodannut C:llä jotta olioisemmat asiat taipuisivat helpolla.

Joissain edesmenneissä työprojekteissa käytettiin C kieltä mutta monia asioita oli kuitenkin tehty oliomaisesti.

Sitten oli väliprojekti (~y2000) jossa verrattiin c++:aa ja c:tä ja todettiin että paukut loppui prossusta kesken jos koodattiin c++:lla. Päädyttiin koodaamaan C:llä käyttäen C++ kääntäjää. Sanomakirjastoon ja joihinkin sanomanvälityksiin yms. oli C++:n tarjoamia juttuja mukana.

(suuri vitsi on se että pitää TIETÄÄ missä asiassa oliot hidastaa ja missä ne ei hidasta, oo:ta tulee käyttää siellä missä se on tarkoituksenmukaista)

Sittemmin on alettu käyttämään entistä enemmän "piirto-ohjelmia" OO softankehitykseen ja CPU tehot on aina loppu ja yksinkerttaiseenkin asiaan menee megatavu muistia. "Turha" optimoinnin tarve varmasti tappaa saadut hyödyt.

Seuraava laite jolle softaa tehdään lienee omaavan sellaisen suorituskyvyn (CPU, muistiväylä, muistin määrä) jotta alkaa homma hoitua "piirtosoftillakin". (kunnes keksitään taas jotain uutta)

 

Jon
Torstaina, 11. elokuuta, 2005 - klo 13.41:   
KimmoK: "Sheep" on saman hepun joka kehitti AmigaE:n ja noin miljoona eri ohjelmointikieltä ;)

Ilmeisesti nykyään pelikoodari (FarCry).

http://strlen.com/

 

Tomi
Torstaina, 11. elokuuta, 2005 - klo 14.46:   
No mieshän on ihan ET.
Tai ainakin melkoisen tuottelias.
Käyttääkös kukaan REBOLia? Joskus kokeilin, mutta oli liian tiukasti sidottu verkkoon, joten kun oma Amiga ei koskaan tiukasti istunut Internetissä, niin jäi ihan kokeiluksi.

 

Tomi
Torstaina, 11. elokuuta, 2005 - klo 15.12:   
Object Orientation FAQ

 

Tomi
Torstaina, 11. elokuuta, 2005 - klo 15.38:   
introduction to oop with Java

Toki tykkäätte länkkäreistä ?

 

Jupp3
Torstaina, 11. elokuuta, 2005 - klo 16.21:   
>Perinteinen: Furniture[n].x = x1; Furniture[n].y = y1;
>
>Olio: Furniture[n].Moveto(x1,y1);

Tokihan asian voi hoitaa "perinteisestikin" eri tavalla:

esim. FurnitureMoveTo(n, x1, y1);

(ymmärrän kyllä, ettei se kuitenkaan ole "sama" kuin oliokoodina)

Monesti ohjelmoidessa pyrin ajattelemaan, minkälaista koodista tulee assemblerina. "Perinteiset" ohjelmointikielet tuntuvat laitteistoläheisemmiltä.

 

jak
Torstaina, 11. elokuuta, 2005 - klo 17.25:   
jos C:tä ja C++:aa verrataan niin kyllä C++ on mielestäni ihan ehdoton esim jotain 3d engineä tai muuta suurempaa projektia koodatessa. Hyötyinä esim koodin uudelleenkäytettävyys (periytys, templatet..), rajapintojen kätevä toteutus (abstaktit luokat), kuormitettavat operaattorit, jne..

 

Joanna
Perjantaina, 12. elokuuta, 2005 - klo 11.38:   
IMHO ... C++ ei ole edes oliohjelmointi-kieli, eikä minusta pitäisi sellaiseen käyttää.. Se on vain pikapika viritelmä jossa primitiivistä C:tä on koetettu muuttaa enemmän muodikkaaksi. On olemassa paljon ohjelmintikieliä jotka ovat alusta saakka tehty Olio-Ohjelmointiin, eli jos asiaa haluaa oikeasti kokeilla, kannattaa ottaa siihen tarkoitukseen tehty kieli.

 

Jon
Perjantaina, 12. elokuuta, 2005 - klo 12.09:   
No C++:ssa on sekin hyvä puoli, ettei se ole "puhdas" oliokieli. On melko kivutonta ottaa mukaan C/assembly-koodia, eikä esim. main-funtiota tarvii laittaa luokkaan (think Java here). C++ antaa paljon vapauksia ohjelmoijalle.

Ja se on edelleenkin niitä harvoja olio-ohjelmointikieliä, joilla voi Amiga-koodia vääntää.

Sitten taas Javasta puuttuu paljon omasta mielestä tärkeitä juttuja kuten pointterit ja operaattoreiden kuormitus.

Mutta siitä olen samaa mieltä, että C++ on huono kieli opetukseen. Toisaalta joku Java voi opettaa laiskaksi kun käyttäjää hemmotellaan automaattisella roskienkeruulla.

Lisää viestisi tähän
Viestisi:
Käyttäjätunnus: Postitus informaatiota:
Tämä on yksityinen keskustelupalsta. Vain rekisteröidyt käyttäjät ja moderaattorit voivat postittaa tänne.
Salasana:
valinnat: Aktivoi URL:t automaattisesti tässä viestissä
Toimenpide: