# Linux ohjelmointi

## VoidMain

Linux ja Gentoo on monipuolinen työkalu ja sisältää oletuksena C++ kääntäjän että voi tehdä omia ohjelmia.

Kun tarkastelee "avoimen lähdekoodin" lähdekoodeja tuntuu siltä ettei koodi olekkaan C++/olio kieltä.

Miten "Linux ohjelmointia" kannattaa lähteä opiskelemaan kun tuntuu ettei koodi ole ollenkaan samaa kun kirjassa

C++ ja olio-ohjelmointi; Päivi Hietanen, mikä on perus kirja C++/olio opetuksessa lähes joka koulussa?

http://www.docendo.fi/?p=showproduct&product=951-846-199-6

Mikä olisi sellainen editori jossa olisi samat toiminnot kuin "Ms .NET" editorissa että kun klikkaa jotain funktiota tai muuttujaa niin näkee missä tiedostossa itse olio/aliohjelma sijaitsee.

Ison ohjelman toimintaa on vaikea hahmottaa jos se koostuu kymmenistä eri lähdekooditiedostoista, tarvitsisi olla jokin aputyökalu hommaan.

Entä onko mitään ohjelmaa joka näyttäisi koodia vuokaavion muodossa?

Kun Gentoossa ohjelmia levitetään lähdekoodina pakattuna, niin mihin ohjelmaan tämän lähdekoodin voisi "importata" ja sitten muuttaa koodia ja kääntää sen?

----------

## Kyrbo

 *VoidMain wrote:*   

> Linux ja Gentoo on monipuolinen työkalu ja sisältää oletuksena C++ kääntäjän että voi tehdä omia ohjelmia.
> 
> Kun tarkastelee "avoimen lähdekoodin" lähdekoodeja tuntuu siltä ettei koodi olekkaan C++/olio kieltä.
> 
> Miten "Linux ohjelmointia" kannattaa lähteä opiskelemaan kun tuntuu ettei koodi ole ollenkaan samaa kun kirjassa

 

Menee ehkä hieman asian vierestä, mutta Linux (eli siis ydin) on ohjelmoitu pääosin C:llä joka on selvästi laitteistonläheisempi kieli kuin C++. Ylipäätään kaikissa hiukankin laajempien ohjelmien lähdekoodeissa ongelmia "aloittelijalle" taitaa muodostaa jonkinnäköisen hahmotelman kasaaminen siitä mitä eri funktio- ja/tai kirjastokutsujen on tarkoitus tehdä. Asiaa ei tietysti helpota sekään, että kielen syntaksin ja jipot kohtuullisen hyvin tuntevalle kommentiksi voi riittää mitä koodilla on tarkoitus saada aikaan kun taas kieleen perehtyjä voisi tarvita kommentoinnin siitä miten koodi tekee sen mitä se tekee. Ohjelmoinnin kannalta "Linux-ohjelmointi" ei ole sen kummempaa kuin mikään muukaan ohjelmointi, joten kielen syntaksin opettelun jälkeen kannattaa tutustua vaikkapa rajapintojen suunnitteluun, periytymiseen (ja viipoloitumisen vaaroihin), STL:n käyttöön sekä muistivuotojen välttämiseen. Nämä nyt ovat vain joitain hyvin ylimalkaisia suuntaviivoja ja käytännössä parhaiten oppii tekemällä eikä pelkästään kirjasta teoriaa lukemalla. Kehitä siis itsellesi vaikka joku projekti jonkun oppilaitoksen ohjelmointikurssien harjoitustöistä joita löytynee googlettamalla.

 *VoidMain wrote:*   

> 
> 
> C++ ja olio-ohjelmointi; Päivi Hietanen, mikä on perus kirja C++/olio opetuksessa lähes joka koulussa?
> 
> http://www.docendo.fi/?p=showproduct&product=951-846-199-6
> ...

 

En tuota kirjaa tunne, mutta kannattaa tehdä jo opetteluvaiheessa mielessään selvä ero, jollet ole vielä tehnyt, olio-ohjelmoinnin ja C++-ohjelmoinnin välille. Ensimmäinen on pikemminkin ajatusmalli joka määrittää miten ohjelmia suunnitellaan olioperustaisesti kun taas jälkimmäinen on "vain" työkalu halutun (olio)rajapinnan toteuttamiseksi.

 *VoidMain wrote:*   

> 
> 
> Entä onko mitään ohjelmaa joka näyttäisi koodia vuokaavion muodossa?
> 
> 

 

Editorikysymykseen minulla ei ole antaa muuta vinkkiä kuin, että älä yritä ymmärtää liian isoa osaa ohjelman toiminnasta yhdellä kertaa ja silloinkin katso vain rajapintadokumentaatiota aina kun mahdollista. Tuohon ohjelmalogiikan esittämiseen vuokaaviona minulla ei ole myöskään tarjota mitään ohjelmaa joka automaattisesti generoi sen lähdekoodista, mutta kannattaa silti tutustua UML-mallinnukseen jota usein käytetään ohjelmistojen suunnitteluvaiheessa.

Jos taas olen tässä ladellut itsestäänselvyyksiä niin jätä kaikin mokomin tämmöset joutavanpäiväiset jorinat huomiotta.  :Smile: 

----------

## Zarhan

Eclipse (emerge eclipse-sdk) lienee kai ihan ok IDE-ympäristö. Asentaa vaan C/C++-pluginit niin se ymmärtää niidenkin päälle.

----------

## jarski

Vielä muutama IDE:

 * KDevelop - http://www.kdevelop.org/

 * Anjuta - http://anjuta.sourceforge.net/

Ensimmäinen pohjaa Qt/KDE:hen, toinen GTK+/Gnomeen. Kehitetty C++:lla ja C:llä, joten toiminta on ainakin vanhemmalla masiinalla jouhevampaa kuin Eclipsen kanssa, joka on kirjoitettu Java:lla.

----------

## Tronic

Code::Blocks, Portagessa dev-util/codeblocks, on myöskin erittäin hyvä IDE nimenomaan C++:lle.

Linuxilla ei perinteisesti ole käytetty juurikaan C++:aa, vaan nimenomaan C:tä, joka kieltämättä on aivan erilainen kieli. C:n kanssa käytetään POSIX-API:a, jolloin ohjelmat toimivat aikalailla suoraan myös muilla unixeilla, mutta eivät kuitenkaan Windowsilla. Nykyisin C++-ohjelmointiinkin löytyy hyvä määrä valmiita kirjastoja, joten sekin onnistuu kivuttomasti. Lisäbonuksena useimmat kirjastot ovat alustariippumattomia, eli sama koodi toimii vaikka millä raudalla ja käyttiksellä (myös Windows).

Mainittu Päivi Hietasen kirja ei ole suorastaan huono (kunhan on uusi painos), mutta ei silti kovin suositeltava kielen opiskeluun. Siinä, kuten useimmissa muissakin C++-kirjoissa, lähestymistapa on hyvin Javamainen ja todellinen C++-ohjelmointi jää hieman pimentoon. Jos englanti ei ole esteenä niin suosittelen kirjaksi C++ Primeria (4. painos), jossa mennään suoraan kiinni moderniin C++-ohjelmointiin ja muistetaan käsitellä kaikki olennaiset asiat kielestä. http://www.amazon.com/C%2B%2B-Primer-4th-Stanley-Lippman/dp/0201721481 (löytyy myös kotimaisista kirjakaupoista).

Vuokaavioiden käyttö kannattaa unohtaa alkuunsa, sillä niillä ei voi mitään vähänkään monimutkaisempaa ohjelmaa esittää ymmärrettävästi. UML- tai muista luokkakaavioista sen sijaan saattaa olla iloa ja sellaiset saa isostakin projektista generoitua ohjelman Doxygen (app-doc/doxygen) avulla. Kun asetuksista laittaa kaikki grafiikat käyttöön, saa ihan kivasti erilaisia klikkailtavia diagrammeja ja muuta dokumentaatiota, joilla yleensä alkaa rakenne hahmottua varsin nopeasti.

----------

## dunp

Oliskohan tästä apua  :Smile: 

http://mindview.net/Books/TICPP/ThinkingInCPP2e.html

-Sebastian

----------

