Proseduraalisen paradigman kielen (C) oliomaisista rakenteista vielä (mietteitä)

Olen nyt tässä blogissa parissa viime postauksessani vuodattanut C-kielestä, ja jatkan siitä vielä.

Edellisessä postauksessa availin jotain C-kielen olio-kieliä muistuttavista ominaisuuksista, vaikka kyseessä ei olekaan olio-kieli. Suomi24-palstalla (Tiede/Teknologia/Ohjelmointi/C-kieli) lisäsin linkin kyseiseen postaukseeni, ja joku minua kokeneempi ohjelmistokehittäjä palstan Anonyyminä vastasi, että ei C:ssä ole juuri muuta, kuin struct-rakenne, joka vastaa jotakuinkin metoditonta tietotyyppiä olio-kielissä.

Kävi mielessä, että jos ohjelmoi oman Header-tiedoston (.h), jonka sisällyttää ohjelmakoodin alussa #include -avainsanalla omaan ohjelmaan, voi periaatteessa käyttää olio-kielten tietotyypin ohjelmointia muistuttavaa menetelmää. “Header” -tiedoston luonti ja omien otsikkotiedostojen käyttö on suotavaa erityisesti laajemmissa ohjelmissa.

Struct-rakenteen sisään voi sisällyttää attribuutteja ja sisäkkäisiä rakenteita (nested structs), mutta funktioita ei. Jos luo .h -tiedoston (otsikkokoodi-tiedoston), voi sisällyttää kaikkia mahdollisia C:n tarjoamia toimintoja, mutta susoituksena on, että otsikkotiedostoon ei sisällytettäisi enää #include-avainsanalla muita .header-tiedostoja.

Toisaalta otsikkotiedostokaan ei vastaa aivan täysin olio-kielissä tuttua tietotyypin määrittelyä, koska konstruktoreita ei ole mahdollista tietenkään luoda minkäänlaisia.

Ainoa C:n tarjoama mahdollisuus otsikkotiedostoissa piilekin siinä, että jos se alkuun määrittelee rakenteen, ja ohjelmoi kyseiseen header-tiedostoon metodit (esim. Javan olio-ohjelmoinnista kaikille tutut set ja get -metodit, joilla pääsee attribuuttien arvoihin käsiksi, (setters and getters), niin periaatteessa olio-ohjelmoinnista tuttu tiedon kapselointimenetelmä toimii ainakin näennäisesti.

Syy, miksi itse kiinnostuin C-kielen haltuunotosta kesäkuun 2019 alussa, on se, että sillä on mahdollista päästä rautaa lähemmäs, koska se on matalan tason kieli, toisin kuten esimerkikiksi Java, jolla on jopa mahdotonta tuottaa koneläheistä koodia.

C:n historiaan perehtyessäni tulin siihen tulokseen, että riippuen siitä, mitä on tarkoitus ohjelmoida, C, vaikka se on 1970-luvulla julkaistu Bellin Puhelinyhtiön laboratoriossa sitä varten, että voitaisiin ohjelmoida käyttöjärjestelmä, ja UNIX on ohjelmoitu kokonaan C:llä. Niin vaikka C-ei olekaan olio-kieli, vaikka tämän hetken akateemisen tietojenkäsittelyn vallitseva ohjelmointi-paradigma on olio-paradigma, niin C:llekin löytyy käyttöä tietyissä tilanteissa.

Itsellänikin on haussa tällä hetkellä kaksi C-ohjelmointi -työpaikkaa syksyllä alkavia, jos en satu pääsemään Työinformatiikan maisterilinjalle sisään Turun Yliopistoon. Kuten varmaan joku tämänkin blogin seuraaja ja lukija on lukenut “IT-tradenomin ammattiblogi“:ani, jossa kerroinkin, että hain ATR-Soft Oy:stä työpaikkaa, ja kesätyöläiset oli jo valittu, mutta jätin option sinne auki, kun syksyksi palkkaavat 3 uutta C-ohjelmistokehittäjää firmaan, riippuen yliopiston valintatuloksista, ilmoitan sitten omalta osaltani tuloksista heille, ja olen mukana taas rekrytoinnissa.

 

Posted in Aktivismi, Blogi, Internet, Konekieli, Koulutus, Linkkivinkki, Linux, Matematiikka, nettivinkki, Ohjelmat, Ohjelmointi, Talous, Turvallisuus, Windows, Yritys | Leave a comment

Otollisin kehitysympäristö C-ohjelmointiin

Viime viikonloppu kuluikin C:n haltuunotossa, ja Linux-järjestelmäympäristö on kuin tehty C-ohjelmoijalle. Kirjoitin Suomi24-palastallakin C-ohjelmointi-osioon, ja Ubuntu Suomen keskusteluun, että oma kehitysympäristöni kattaa Code::Breaks -IDE:n, joka on avoin ja vapaa cross-platform, eli alustariippumaton koodieditori.

Code::Breaks IDE vaikutti mielekkäältä keveytensä ansiosta kun se toimii 14 vuotta vanhassa kannettavassani, jonka olen valjastanut ohjelmistokehitys-koneekseni. Käytän siinä Lubuntu -distroa, joka on Ubuntu-variantti jakeluversio.

Linuxissa on valmiina GNU GCC-Kääntäjä, joka sekin on avoin, toisin kun taas Windows-puolella ongelmia tuottaa ensinnäkin Windows kun on hyvin sujljettu järjestelmä, ensinnä pitäisi löytää Winkkarille C-kääntäjä, joka on avoin. Sellainenkin tosin löytyy, minigw-64 -projekti, joka asentaa Windows-ympäristöön GCC:n, ja vielä jos sen lisää ympäristömuuttuja-parametreihin, Windowsillakin on mahdollista tehdä C:tä vaikka Muistiolla, vaikkakin Notepad++ on parempi Muistio -Windowsille.

Windows-ohjelmoinnin voi melkein unohtaa, vaikka Mikkiskin on uutisoinut ja tiedottanut muuttuvansa avoimempaan suuntaan, mutta tiedä siitä sitten.

Itse punavihreänä avoimuuden ja vapauden kannattajana kun haluan edistää avoimen yhteisön periaatetta ja sen tietoiseksi tekemisen edistämistä kauttaaltaan toiminnassani, avoin lähdekoodi on kuin tehty minulle.

 

Posted in Aktivismi, Internet, Konekieli, Koulutus, Linux, nettivinkki, Ohjelmat, Ohjelmointi, Windows | Leave a comment

Kertoma C-kielellä parametrista komentoriviltä

Olen tässä viimeiset pari päivää ollut tiukasti tekemisissä C-kielen treenauksen äärellä. Valmistin äsken pienen ohjelman, jonka lähdekoodin julkaisin Githubissa C-Stuff-kansiossa-profiilistani, jos joku haluaa tarkastella sitä ja kääntää sen mahdollisesti Linux-ympäristössä.

Windowsin komentokehoitteeesta ajettava.EXE-tiedosto ja myös .C -lähdekooditiedosto löytyy osoitteesta:

https://www.dropbox.com/sh/ga07vdvklqslnz3/AADrk2AXdbygoaCB39f4Ht4Sa?dl=0

Kertoma.c:n kääntö ja ajo Linux-ympäristössä

1. gcc Kertoma.c (Luo kertoma.o -tiedoston)

2. make Kertoma

3. Mikäli ei ole vielä ajettava tiedosto,

sudo chmod +x Kertoma

4. ./Kertoma [parametrit];

parametrina annetaan terminaalissa luku, jonka kertoma halutaan selvittää.

Kertoma.EXE:n ajo Windows Komentotulkissa ei liene taretta ohjeelle?

 

 

 

 

 

Posted in Aktivismi, Hupi, Konekieli, Koulutus, Linkkivinkki, nettivinkki, Turvallisuus, Uncategorized, Windows | 2 Comments

Mikä saa C-kielen näyttämään olio-kieleltä?

Vaikka akateemisen ohjelmistokehitysmaailman tällä hetkellä vallitseva ohjelmointiparadigma on olioperusteinen lähestymistapa, silti teollisuudessa käytetään vielä myös C-kieltä, ja C-ohjelmointi-työpaikkojakin on vielä saatavilla.

C ei ole olio-kieli, vaikka siinä on piirteitä ja viitteitä olio-kielistä oman tarkasteluni jälkeen. Esimerkiksi tietotyypin (Data Type) määrittelyyn käytettävä struct-avainsana muistuttaa esimerkiksi Javan luokan määrittelyä, mutta kuitenkaan se ei ole luokka, jonka ilmentymää voitaisiin luoda johonkin muistipaikkaan, ja oliokielien ominaisuus periytyminen puuttuu C:stä täysin. eli Data structurea ei voida periyttää tai kukaan ei voi periä sitä, toisin kuin taas C++:ssa on käytössä moniperinnöllisyys, ja Java-luokka voi periä ainoastaan yhden luokan, mutta voi toteuttaa (implements) rajattoman määrän rajapintoja.

Toinen seikka, joka saa joka viittaa oliokieliin C:ssä, on Pointterit (Pointers). Olio-kielissä, kuten Javassa esimerkiksi koodi lause :(String myNameIs = ”Jere Sumell”), joka vastaa koodilausetta ”String myNameIs = new String(”Jere Sumell”), koska Javassa String-tyyppiset muuttujat käsitetään oliomuuttujina, niin myNameIs sisältää ainoastaan viittauksen tietokoneen muistipaikkaan, jossa arvo ”Jere Sumell” sijaitsee fyysisesti, eikä siis sisällä suoraan arvoa. Vastaavasti, jos C-kielessä määritellään :(char[] myNameIs =”Jere Sumell”&), ja vielä käytetään pointteria ”realName* = myNameIs”, saavutetaan sama tulos, eli asetetaan realName -muuttujan arvoksi viittaus muistipaikkaan, jossa char-merkkitaulukko, joka sisältää merkit ”Jere Sumell” kukin omassa alkiossaan, saadaan vähän oliopiirteitä näkymään C:ssäkin.

Jos joku blogini seuraaja haluaa jatkaa C:n oliomaisia piirteitä esille tuoduksi, kommentteja kiitos.

Posted in Blogi, Internet, Konekieli, Koulutus, Linux, Matematiikka, Ohjelmointi, Talous, Turvallisuus, Windows | Leave a comment

Webmasterit ja mainostajat Huomio!

Jos joku blogini seuraaja luo sisältöä verkkoon, ja ylläpitää omaa verkkosivua, ja käytätte jotain mainosverkostoa mainosjulkaisijana, olettehan muistaneet lisätä kotisivupalvelimellenne juurihakemistoon “ads.txt” -tiedoston?

Lisää voi lukea vaikka englanninkielisestä Wikipediasta.

Google AdSense -ohjesivulla on kattavat suomenkieliset ohjeet, miten toimitaan, jos on Google AdSense -mainosjulkaisija.

Posted in Aktivismi, Blogi, Internet, Koulutus, Linkkivinkki, Markkinointi, Mobiili, nettivinkki, Talous, Turvallisuus, Yritys | Leave a comment

Uuden merkkijono -Java-kirjastoni syntymähetki

Kun olen nyt pari luokkaa julkaissut tuohon hakukonerobotti-projektiini, sivutuotteena on alkanut syntyä merkkijono-metodeita, jotka ovat ihan ohjelmointiteoriaakin ajatellen hyödyllisiä, ja teorian kannalta uudelleenkäytettäviä missä tahansa ohjelmistossa.

Lisäsin Github-profiiliini Java-Stuff -kansiooni “StringLibrary” -luokan, jossa on kaikki muuttujat ja metodit staattisia. Niitähän voi kutsua esim. StringLibrary.reverseString(“ereJ”); , joka palauttaa merkkijonon “Jere”.

Eli kun luokka on määritelty tai attribuutti on määritelty static – avainsanalla, siihen tulee viitata ensin tietotyypin nimi, tässä tapauksessa “StringLibrary”, sitten vasta metodin tai attribuutin nimi, johon viitataan, esimerkissäni “.reverseString(String x)”, joka saa syöteparametrinaan String-tyyppisen oliomuuttuja-merkkijonon.

Sun Microsystems kehittäessään Javaa muinoin, esimerkkinä vain, kun käytetään taulukon läpikäynnissä taulukko.length, Sun Microsystems tai Oracle nykyään, joka kehittää Java-ohjelmointikieltä, on määritellyt luokassa, jossa kokonaislukutyyppisiä int-taulukoita käsitellään, nekin kun on oliomuuttujia Javassa, niin length on määritelty kokonaisluku-taulukko-tietotyypin attribuutiksi.

Toisin kuin String-tietotyyppi, joka on aina viittaus merkkijonon olion muistipaikkaan muistissa, siellä ei ole length-attribuuttia, vaan sen pituuden saa sitten selvitettyä esimerkiksi silmukkaa ohjelmoitaessa “mjono.length()”, eli kyseessä onkin Javan ohjelmointikielen kehittäjien kehittämä metodi!

StringLibrary -luokka löytyy Github-profiilistani Java-Stuff-kansiosta ja suora osoite on

https://github.com/jjsume/Java-stuff/blob/master/StringLibrary.java

Posted in Aktivismi, Blogi, Hupi, Internet, IoT, Koulutus, Linkkivinkki, Markkinointi, Matematiikka, nettivinkki, Ohjelmointi, Talous, Tietokannat, Turvallisuus | Leave a comment

Uusi kunnianhimoinen projektini näki päivänvalon (Redonioncrawler)

Eilen kirjoitin jo illalla artikkelin perusidealtaan yksinkertaisen hakukonerobotin toiminnasta, ja kirjoitin myös jo ensimmäisen luokan Javalla projektiin liittyen.

Tänään avasin projektilleni blogin, josta sitä voi seurata. Suora osoite toistaiseksi on:

https://redonioincrawler.home.blog/

Posted in Uncategorized | Leave a comment