Otin haltuun tänään C-kielen teoriassa, ensi yö kuluu vanhan kannettavani Lubuntun parissa käytäntöön siirtmisessä jos työllistyisi C-ohjelmoijana, sitäkin kun vielä teollisuudessa käytetään.
Kirjoitin tietokoneblogiini artikkelin "Mikä saa C-kielen näyttämään olio-kieleltä?", jossa nostan esiin kaksi seikkaa. Olisi mukavaa, jos joku kokeneempi C-ohjelmoija vaikka pistäisi blogiin kommenttia muista oliomaisista oveluuksista kielessä, joka kuitenkaan ei ole olio-kieli.
https://tietokoneblogi.wordpress.com/2019/06/13/mika-saa-c-kielen-nayttamaan-olio-kielelta/
C-kielen oliokieliä muistuttavat piirteet. Mitä muita kui nämä on?
36
146
Vastaukset
- Anonyymi
Voisin laittaa kommentteja, riippuu täysin siitä paljonko Sinä maksat minulle ennalta käteistä rahaa, mieluiten platinaharkkoina, sitten :D
heh heh. Kommentointi on täysin vapaa-ehtoista ja avoimen yhteiskunnan ja avoimen keskustelun7kritiikin yms. esittäminen omalla vastuulla. C -kieli on perua 1970-luvulta, niin ei siinä juuri Einstein tarvitse olla, kun handlaa oliokielten yleisominaisuudet, ja vertaa niitä C-kielen tarjoamiin mahdollisuuksiin.
Kunhan nyt käytin aikaani keskustelun avaukseen, jos joku haluaa loistaa. Sitäpaitsi kirjoitit Anonyymina vastauksen, niin yleensäkään en asioi anonyymien kanssa.- Anonyymi
Maksatko vai etkö maksa, käyn sivulla vain maksusta.
- Anonyymi
Sama täällä, minäkin slikkailen mainoksia vain maksusta.
En ihan keksi mitä ajat takaa tuolla "mikä saa C-kielen näyttämään oliokieleltä".
- Anonyymi
Nimitykset oliokieli ja olio-ohjelmointi ja koko olion käsite ohjelmoinnissa on pelkkää virhettä ja erehdystä.
- Anonyymi
Ei siinä muuta ole kuin struktuuri, joka on periaatteessa metoditon olio.
https://en.wikipedia.org/wiki/Struct_(C_programming_language)
Itse diggaan C-kielestä sen yksinkertaisuuden vuoksi. Ja siksi ettei siinä ole mitään olioita. Oliot ovat nimittäin perseestä, ja ne opettavat koodarit pahoille tavoille. No lähinnä ajattelin tuon jonkinlaiseksi keskustelun avaukseksi tosiaan, kun aloitin tutkimusmatkani C-kieleen Googlaamalla "Is C Object-oriented programming language?" ja Quorassa vai missä oli, että ei ole sitä, , mutta sisältää ominaisuuksia jotka saattaa viitata oliokielistä tuttuihin ominaisuuksiin.
Sitten luin Tutorialspointin C-oppaan, ja aloitin käytännön treenin Linux-ympäristössä. Käytän Code::Blocks -IDEää, ko se on avoin ja ilmainenn ja kevyt vanhalle koneelle käyttää.
https://www.geeksforgeeks.org/difference-between-java-and-c-language/
Tuolta löytyi tuollainen artikkeli, kun selaisilin hakutermillä "Segmentation fault (Core Dumped), kun herja tuli ajaessani vähän monimutkaisempaa ohjelmaa, mit "Hello Worldin" tulostamminen.
Tarkoitukseni oli lisätä linkki artikkelin asiapitoisuuden vuoksi, eikä se ole mainos. En harrasta mainosSpammia missään muodossa, en jaa tai levitä sitä, enkä lue mainosSpammia. Noista parista Anonyymista ekasta vastauksesta "En klikkaa mainosta, jos en saa rahaa" tulee mieleen,että lyhyen aikaa netissä roikkuvat teinit on löytänyt PaidToClick ja PaidbyReadeMails -spammisivustot.
No okei, kuten varmaan olette tutustuneet mun kotisivuuni, mäkin oon yhdessä spämmiklikkailussa mukana ollut, mutta lopetin parin päivän jälkeen, kokemuksen siitä parista päivästä kirjoitin kotisivulleni. "Neobux-kokemus".- Anonyymi
Javaa ja C-kieltä on turha edes sovitella samaan lauseeseen. C-kieltä kannattaa verrata mielummin assemblyyn.
- Anonyymi
Miksi edes kuvittelet että olisi tutustuttu sinun kotisivuusi, ei ole aikaa joka roskasivustoa selata.
Se on totta, C:ssä on prodesuraalisen paradigman mukainen lähestymistapa, ja java on olio-suuntaunut. Vähän sama varmaan, jos yrittäisi selittää auton toimintaan liittyvää tekniikkaa ihmiselle, joka ei ole perillä siitä, että mikä ero on öljykäyttöisessä polttommoottiri-pohjaisessa auton toiminnassa verrattuna sähköautoon. Jollain tasolla voi etsiä eroavaisuuksia ja yhtäläisyyksiä, mutta ne on kuin kaksi eri maailmaa. Eikö?
- Anonyymi
Lopeta se jäkeltäminen, ei tuosta mitään tule.
- Anonyymi
Miksi sinä teänne tulit jokeltamaan sontaa, sinullahan piti olla omat sivut sitä varten.
Ohjelmointikieleissä voi käyttää eri paradigmoja mutta niissä ei välttämättä ole rakennettuna toimintoja niitä helpottamaan.
Se riippuu siitä mitä haluaa saada aikaiseksi, että mikä on siihen sopivin työkalu.
- Anonyymi
Pointtereita en kyllä pitäisi oliokieliin viittaavana ominaisuutena. Nehän ovat osa tietokoneen matalan tason toimintaa, kaikella tiedolla on osoite, joka C:ssä on suoraan näkyvissä ja käytettävissä. Korkeamman tason kielissä pointtereita yleensä vähintäänkin "paheksutaan" ja pyritään piilottamaan, vaikka toki sielläkin on asioita, jotka ovat käytännössä pointtereita.
No joo, esimerkki:
Java-koodi:
String freePeople="Rocking in the free world".
maallikko, joka ei tunne ohjelmointia teoriatasolla, voisi tulkita puhutulla kielellä tuon koodirivin "Muuttuujaan "freePeople", asetetaan merkkijono "Rocking in the free world". Vaikka todellisuudessa freePeople-muuttujan muistipaikkaan lisätään viittaus siihen muistipaikkaan, missä tuo "Rocking in the free world" fyysisesti sijaitsee. Tämä muistuttaa tuota Pointerin toimintatapaa mielestäni, vaikka Javassa ei ohjelmoijalle näy tämä, tosiaan kuten sanoit, piilotetaan muistipaikka.- Anonyymi
jerzunposti kirjoitti:
No joo, esimerkki:
Java-koodi:
String freePeople="Rocking in the free world".
maallikko, joka ei tunne ohjelmointia teoriatasolla, voisi tulkita puhutulla kielellä tuon koodirivin "Muuttuujaan "freePeople", asetetaan merkkijono "Rocking in the free world". Vaikka todellisuudessa freePeople-muuttujan muistipaikkaan lisätään viittaus siihen muistipaikkaan, missä tuo "Rocking in the free world" fyysisesti sijaitsee. Tämä muistuttaa tuota Pointerin toimintatapaa mielestäni, vaikka Javassa ei ohjelmoijalle näy tämä, tosiaan kuten sanoit, piilotetaan muistipaikka.Javaa ja C-kieltä ei tule edelleenkään käsitellä samassa lauseessa. Ovat kaksi täysin eri asiaa, vaikka syntaksi molemmissa onkin samantyylinen, tai siis Javassa C-kielen kaltainen.
M-Kar, totta! Riippuu siitä, mitä on tarkoitus ohjelmoida. Javakin esimerkiksi on korkeamman tason olio-kieli, ja jos on tarkoitus kehittää käyttöjärjestelmää tai firmistä, voi olla aika haasteellista, jossain määrin jopa mahdotonta ruveta vääntäämään Javaa. Vaikka on Javallakin ohjelmoitu käyttöjärjestelmiä ainakin harrastemielellä ainakin ennen JavaOS:ää. C kiinnostaa itseäni siitä syystä, että se on matalamman tason kieli, ja pääsee lähemmäs rautaa, jos on taitoa.
Luin jostain lähteestä, että C-kieli, kun Bellin puhelinyhtiön laboratoriossa se kehitettiin 1970 -luvulla, tarkoituksena oli kehittää kieli, jolla voi ohjelmoida käyttöjärjestelmän, ja UNIX on ohjelmoitu kokonaan C:llä. Sitten taas Linuskin koodasi varmaan Linuxin, joka on hiton hyvä UNIX-klooni, enkä puhu ainoastaan Kali Linuxista, jota käytetään Penetraatio-testauksessa käyttiksenä teollisuudessa, puhtaasti C:llä 1980-luvulla, kun se julkaistiin 1990.
Valvoin koko viime yön Lubuntu-läppärini äärellä käytännön treenin parissa, kun teorian otin illalla haltuun, ni totesin, että Linux on kuin tehty C-kehittäjälle. Windows-ohjelmoinnin voi melkein unohtaa tai Winkkarin voi periaatteessa unohtaa kokonaan, Mikkiksellä on kaikki niin suljettua ollut aina, vaikka nyt nekin on uutisoineet, että muuttuu avoimempaan suuntaan, mutta tiedä siitä sitten.
Ja itse olen avoimen yhteiskunnan ja avoimen lähdekoodin ja vapauden punavihreä kannattaja ja haluan edistää toiminnallani näiden asioiden kehitttymistä ja ihmisten käsitysten muuttamista kohti avoimempaa ja vapaampaa yhteiskuntaa. punavihreästi. Suljettu lähdekoodi on jäänne muinaisajoista.
Jos joku täälä Suoli24-palstalla lukee Ubuntu Suomi -keskustelualuetta, olen siellä puhunut MAC-spoofering -ohjelmiston valmistamisesta konekielellä, kun monet nykyiset WLAN-reitittimet alustaa MAC-osoitteen heti koneen virran päällesyötön jälkeen, ja C voisi olla kieli, jahka edistyn sinä, jolla pystyn valmistamaan ohjelman, joka sekoittaa WLan -reitittimen MAC-osoitteen jo ennen käyttöjärjestelmän lataamisen alkuunlähtöä. Tommosesta BIOS-vaiheen WLan-reitittimen MAC-spoofering -ohjelmistosta saisi hyvän korkeamman korkeakoulututkinnon opinnäytetyötutkielman yliopistossa, jos haluaa tehdä sen tietojenkäsittelyssä.
Itse hain viime haussa kaksi vuotta kestävään Työinformatiikan maisteri-linjalle Turun Kauppikseen IT-tradenomitutkinnollani, koska haluan vähemmän lopulta teknologiaa, ja kokonaisvaltaisempaa käsitystä tietojärjestelmien kehittämisestä ihmisläheisestä lähestymistavasta katsoen. Työinformatiikka lukeutuu Turku School of Economicsissa nimenomaan Tietojärjestelmätieteiden hallintoalaan. Vielä täytyy jännittää tuloksia noin 2 viikkoa.C tosiaankin on tehty sitä varten, että saatiin tehtyä Unix ja siitä siirrettävä.
Sattuneesta syystä C soveltuu hyvin siihen kun sitä käyttää kuten on alunperin suunniteltu ja mihin se on tehty. Eli siihen, että pieniä C-kielisiä komponentteja Unix -putkiin, rajapintana stdin/stdout.
Sitten niitä komponentteja voi liimata kokonaisuudeksi vaikka Bourne shell yhteensopivalla skriptillä.
Kun jokainen komponentti on yksi prosessi ja hyvin eristetty niin ei siellä oikein tarvitse mitään olioita ja tavoiteltava paradigma on oikeastaan funktionaalista ohjelmointia kun se unix putki on oikeastaan dataflow paradigmaa.
Se vaan että C-kieli on proseduraalinen mutta vaikka sillä voikin ohjelmoida funktionaalisesti, ohjelmoija joutuu huolehtimaan siitä että ei tule liikaa rekursiota kun muuten käy pinon ylivuoto. Funktionaalisia rakenteita joutuu sitten purkamaan iteratiivisiksi.
Olio-ohjelmointi lähinnä toi työkaluja siihen, että saatiin saman prosessin sisällä tehtyä helpommin laajempia juttuja kun C-kielen nimiavaruus rajoitti ja olio-ohjelmoinnilla voi mallintaa jotain rakenteita sinne, kuten vaikka service registryä ja sen voi tehdä vaikka prosessin sisään jos siltä tuntuu. C-kielellä nativii tapa olisi tietenkin käyttää käyttöjärjestelmän init -järjestelmän muodostamaa service registryä.
Olio-ohjelmoinnin suosio tuli lähinnä siitä, kun tehtiin graafisia ohjelmia joita myytiin lisäämällä ominaisuuksia ja myyntiesitteissä sitten ranskalaisilal viivoilla niitä ominaisuuksia ja tehtiin sellaisia möhköohjelmia.
Olio-ohjelmointi vaan suurimmaksi osaksi ymmärrettiin alalla väärin ja porukka alkoi hölmönään tallentamaan ohjelman tilaa olioihin miten sattuu.
- Anonyymi
C:ssäkin toki voi käyttää jossain määrin oliomaista koodaustapaa, esim. ryhmitellä dataa ja sitä käyttävää koodia yhtenäisiksi kokonaisuuksiksi. Voi toki "olioleikkiä" viedä niinkin pitkälle, että laittaa structiin funktiopointtereina "metodeja", mutta ei siitä mitään hyötyä juuri taida olla. Käytännössä kai tehdään usein erillinen moduli, sourcekooditiedosto, jolla voi olla niin sisäistä kuin uloskin näkyvää dataa ja ulos päin tarjottava funktiorajapinta, jolla sitä käsitellään.
Voidaan myös tehdä esim. structi, jossa on tavallaan luokan public-data, joka näytetään modulista ulospäin, ja modulin sisällä voi olla erikseen piilotettua dataa. Rajapintafunktiot voi olla ikään kuin metodeja, joilla viitataan tiettyyn "olioon" eli käytännössä structiin. Toki sitten noita "metodeja" kutsuessa kielen syntaksi ei salli tyyliä olio.metodi(blaa, blaa...) vaan jotain tyyliin metodi(&olio, blaa, blaa…).
Jonkinlaista periytymistä voinee toteuttaa siihen tapaan, että tekee uuden structin, jossa yhtenä alkiona on "perittävä" structi, ja silloin myös uuden "luokan" perittyä osaa pystyy edelleen käsittelemään perityillä metodeilla, tai ne voi korvata uusilla.
C kielihän ei sinänsä mitenkään tue tai pakota tuollaista tapaa, vaan kyse on vain siitä että asia päätetään toteuttaa sillä tavalla ja koodi sitten tehdään niin. Yleensäkin C kieli antaa koodaajalle vapauden toteuttaa asioita monella tavalla.
Nojaa, enpä ole tuota asiaa tarkemmin pohtinut, tällaista vaan ensimmäisenä tuli mieleen. Ei ole ainakaan minun projekteissa mitenkään erityisesti pyritty tekemään C:llä oliomaista koodia, vaikka jotain tuon tapaisia toteutuksia kyllä tehdäänkin. - Anonyymi
Joku sanoi joskus, että ohjelmointikielessä ei ole enää käskyjä vaan olioita. Tuli vain mieleen, kun huomasin tämän ketjun. Osaako kukaan selittää kansantajuisesti, mikä olio on ja miten se eroaa perinteisistä ohjelmointikielistä? Olen muinoin ohjelmoinut basicilla ja jollakin muullakin, mutta olioilla en.
- Anonyymi
M-Kar kirjoitti:
Ohjelmoitava tietotyyppi.
Ei sano mitään. Kuvittelen, että olio on tietyn asian tekevä ohjelma, mikä on ohjelmoitu alemman tason ohjelmointikielellä. Näitä valmiita ohjelmapätkiä so. olioita yhdistelemällä päästään ohjelmoimaan korkeammalla tasolla.
Tavallaan perinteiset ohjelmakäskytkin ovat konekielisiä ohjelmia. Saatan olla ihan pihallakin, mutta kerta ei ole ensimmäinen.
Minusta on mukavaa lukea täysin vieraan alan juttuja. Tässäkin ketjussa on kommentteja, mistä en ymmärrä yhtään mitään. Anonyymi kirjoitti:
Ei sano mitään. Kuvittelen, että olio on tietyn asian tekevä ohjelma, mikä on ohjelmoitu alemman tason ohjelmointikielellä. Näitä valmiita ohjelmapätkiä so. olioita yhdistelemällä päästään ohjelmoimaan korkeammalla tasolla.
Tavallaan perinteiset ohjelmakäskytkin ovat konekielisiä ohjelmia. Saatan olla ihan pihallakin, mutta kerta ei ole ensimmäinen.
Minusta on mukavaa lukea täysin vieraan alan juttuja. Tässäkin ketjussa on kommentteja, mistä en ymmärrä yhtään mitään."Kuvittelen, että olio on tietyn asian tekevä ohjelma, mikä on ohjelmoitu alemman tason ohjelmointikielellä."
Ei ole. Se on tietotyyppi kuten vaikka string, integer, float tai vaikka linkitetty lista tai mikä tahansa rakenne.- Anonyymi
M-Kar kirjoitti:
"Kuvittelen, että olio on tietyn asian tekevä ohjelma, mikä on ohjelmoitu alemman tason ohjelmointikielellä."
Ei ole. Se on tietotyyppi kuten vaikka string, integer, float tai vaikka linkitetty lista tai mikä tahansa rakenne.Pakko oli katsoa sanakirjasta, mitä nuo ovat suomeksi. Merkkijono, kokonaisluku, liukuluku. Tuntuu jopa kuvittelemaani oudommalta. Jos oliot ovat tuollaisia, niin mistä olio-ohjelmointi tulee? Ohjelmoidaanko olio-ohjelmointikielellä olioita eli merkkijonoja jne vai merkkijonoilla jotakin muuta?
- Anonyymi
M-Kar kirjoitti:
"Kuvittelen, että olio on tietyn asian tekevä ohjelma, mikä on ohjelmoitu alemman tason ohjelmointikielellä."
Ei ole. Se on tietotyyppi kuten vaikka string, integer, float tai vaikka linkitetty lista tai mikä tahansa rakenne.Olioon kuluu myös metodit. Miten oliota voi käsitellä.
Sen "alla" on laajennettu (alustettava) tietue.
sitten tietue,
merkkijono,
kokonaisluku,liukuluku,merkki
Otan kantaa tähän kysymykseen, mikä on "olio"? Perusteeltaan, kun luodaan tietotyypi (Data Type), sitten siitä luodaan jokin ilmentymä (Instance), niin voidaan kohdistaa tietotyypin johonkin metodiin kutsu.
Esimerkiksi Javalla kun luodaan uusi ilmentymä,, käytetään avainsanaa new, ja sen jälkeen voidaan viitata . -notaatiolla kyseisen tietotyypin näkyviin metodeihin, jotka ovat aina "public" -määritelmällä luotuja.
Olio-muttuja on aina viittaus muistipaikkaan, jossa fyysinen tieto lopulta sijaitsee ja se on siis luotu tietotyypistä. Olio siis on jonkin tietotyypin ilmentymä aina.Tuosta oliosta ja tietotyypistä vielä, että tietotyypin suunnittelussa ja ohjelmoinnissa on vielä tiedon kapselointi-ajatus tärkeä, että tietotyypin ominaisuuksiin ei päästä käsiksi suoraan, vaan kohdistamalla tosiaan .-notaatiolla tietotyypin metodiin kutsu, joka joko muuttaa tai palauttaa tietotyypin halutun attribuutin arvon. (Javassa set, ja -get -metodit. [Setters and Getters])
Ne getterit ja setterit juurikin ovat aivovammaa. Olioiden pitää olla tilattomia.
Jos koodissa on getteriä ja setteriä niin silloin tekee jotain väärin.- Anonyymi
Rekursiiviset funktiot, funktiot funktioiden sisällä sekä omaa ohjelmakoodiaan muuttavat funktiot ovat erittäin tyypillisiä c-kielelle esim. struct-rakenteissa.
Tuli vielä mieleen, kun perehtysin tänä aamuna siihen, mitä customoituun header (.h) tiedostoon voi sisällyttää, niin eikö se vastaa jotakuinkin tietotyypin määrittelyä.
Header-tiedostoon voi lisätä muuttujia, struct-rakenteita, ja funktioita.
Ainoa ero oliokieliin on vain se, että tietotyyppiin perustuvaa olio-muuttujaa ei voi luoda, vaan metodeita ja dataa käsitellään suoraan C-ohjelmassa kunhan ensin on #includella sisällytetty oma .header -tiedosto ohjelmaan.Ja sitten taas, jos haluaa laajentaa jotain tietotyyppiä, perintää tosiaan kun ei ole mahdollista käyttää, niin voi sisällyttää omaan header-tiedostoon ylemmän tason header-tiedoston.
Esimerkiksi jos luon human.h -headertiedoston,
ja sitten seuraavaksi Man.h ja Woman.h, niin saan human.h -datan käyttöön noissa Man ja Woman.h:ssa lisäämällä niiden alkuun #include <human.h>?
Olenko nyt tajunnut tämän jotenkin hakoteitse?- Anonyymi
C ei ole oliokieli, joten ei siinä olio-ominaisuuksiakaan ole. Toki jossain määrin oliomaisen oloista toteutusta voi tehdä.
Tuossa human/man/woman tapauksessa voi humanille määritellä kaikille ihmisille yhteiset ominaisuudet ja sitten man/woman structiin voi sen human-structin ottaa yhdeksi alkioksi, samaan tapaan kuin auton omistaja tuolla toisessa esimerkissä. Ja se include tarvitaan myös, jos nuo tehdään eri tiedostoihin. Tuo Includehan käytännössä kopioi human.h tiedoston sisällön esim. man.h tiedostoon, siihen kohtaan, jossa #include on.
Aiempaan kommenttiin viitaten vielä sen verran, että headeriin ei kannata laittaa koodia eikä muuttujien varausta, vain tyyppimäärittelyjä, mahdollisia extern-viittauksia muuttujiin ja funktioiden prototyyppejä, johtuen esim. juuri tuosta, että headerin sisältö voi kopioitua useampaan tiedostoon. - Anonyymi
Vala-kielihän on olio-perusteinen ja kääntää välimuodon C-kieleksi, siitä näkee sitten miltä olio-ohjelmointi näyttää C-kielellä :)
Kirjoitin vielä yhden artikkelin blogiini tuosta C-kielen oliomaisista tai näennäisesti oliomaisista piirteistä pohdintoja-metodilla, tai mietteitä, kuten otsikossa on. En tiedä, puhunko aivan palturia, mutta siksi ne onkin pohdintoja. Joku kokeneempi C-ohjelmoija voinee tyrmätä joitain ajatuksiani, jos tykkää, niin minäkin tulisin viisaammaksi.
https://tietokoneblogi.wordpress.com/2019/06/24/proseduraalisen-paradigman-kielen-c-oliomaisista-rakenteista-viela-mietteita/
Ketjusta on poistettu 1 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
20e Riskitön veto 20e talletuksella VB:lle
Pssst! Vinkki viis rotvallinreunalla eläjille. VB tarjoaa 20 euron riskittömän vedon ensitallettajille vedonlyöntiin.42437- 1161607
Viiimeinen viesti
Sinulle neiti ristiriita vai mikä nimesi sitten ikinä onkaan. Mulle alkaa riittää tää sekoilu. Oot leikkiny mun tunteill361346Analyysiä: Kiuru-keissi oli ja meni - demarit hävisi tässäkin
Tapauksen tultua julki alkoi demarit ja muu vasemmisto selittään, että tämä oli poliittista väkivaltaa, siis ennen kuin1561181- 521095
- 1131082
- 571041
Suomessa on valittava 2 lucia neitoa...
Maahanmuuttajille oma lucia neito ja Suomalaisille oma SUOMALAINEN Lucia neito....sama juttu on tehtävä miss Suomi kisoi1051034Olet tärkeä
mutta tunnen jotain enemmän ja syvempää. Jos voisinkin kertoa sinulle... Olen lähinnä epätoivoinen ja surullinen.46909- 60882