Tanmese a programozásról

Egyszer volt, hol nem volt, az információtengeren túl, a digitális üveghegyen is túl, élt egyszer egy király. Egy szép napon a király úgy döntött, hogy próbára teszi két legtapasztaltabb tanácsadóját, a villamosmérnököt és a programozót. Magához hívatta tehát őket, és eléjük tett egy kis fényes dobozt, aminek a tetején két hosszúkás nyílás volt, az oldalán pedig egy fekete gomb és egy emelőkar.

"Mit gondoltok, mi ez?" – kérdezte a király a tanácsadókat.

Elsőként a villamosmérnök szólalt meg.
"Felség, ez egy pirítóssütő."

"Rendben van. Hogyan oldanád meg a pirítóssütő számítógépes vezérlését?" – kérdezte a király.

"Természetesen egy nyolcbites mikrokontrollerrel. Írnék egy kis programot, ami beolvasná a gomb állását, és ennek alapján kiválasztana egyet a tizenhat előre definiált pirítósfajta (halvány barna, közepesen barna, nagyon barna, fekete, nagyon fekete… szénné égett) közül. Mind a tizenhat pirítósfajtához tartozna egy-egy számlálóérték, amit egy ROM-ba égetett táblázat tartalmazná. A program kiolvasná a táblázatból a gomb állásához tartozó számlálóértéket, és ennek megfelelő ideig melegítené a fűtőszálakat. A pirítás befejeztével kikapcsolná a fűtést és kidobná a kész pirítóst. A jövő hétre készen is leszek a prototípussal."

A programozó azonnal felismerte a villamosmérnök rövidlátó gondolkodásának korlátait. Így szólt a királyhoz:

"Felség, a pirítóssütőt nem csak kenyérpirításra lehet használni. Meg lehet például melegíteni vele a gyorsfagyasztott pizza szeleteket. Ez a doboz valójában nem egyszerűen pirítóssütő, hanem egy univerzális reggelikészítő berendezés. Ahogy királyságod fejlődik, alattvalóid egyre újabb szolgáltatásokat fognak követelni. Olyan reggelikészítőt szeretnének majd, amivel virslit is lehet főzni, szalonnát sütni, vagy rántottát készíteni. Egy egyszerű pirítóssütő nagyon gyorsan elavulttá válik. Ha nem vesszük figyelembe a fejlődés irányát, akkor néhány éven belül teljesen át kell majd terveznünk a pirítóssütőt."

"Ha tekintettel vagyunk erre a tényre, akkor egy sokkal intelligensebb megoldást is találhatunk. Először is vezessük be a reggelire fogyasztott ételek osztályát. Származtassunk ebből három alosztályt: a liszt, sertés, illetve baromfi ételek osztályát. A művelet további ismétlésével a liszt osztályából létrehozzuk a pirítós, a zsemle és a pizza osztályt, a sertés osztályból a sonka, virsli és szalonna osztályt, a baromfiból pedig a rántotta, tükörtojás, lágytojás, keménytojás és a különféle omlettek osztályát."

"A sonkás tojás külön figyelmet érdemel, mivel a sertés, a tejtermék, és a baromfi osztályokból is örököl tulajdonságokat. Látható, hogy a probléma többszörös öröklődés nélkül nem kezelhető egzakt módon."

"A reggelikészítő működése a bevezetett formalizmus segítségével rendkívül leegyszerűsödik: a program futási időben létrehozza a megfelelő objektumot és "Süsd meg magad" üzenetet küld neki. Az üzenet szemantikája természetesen a konkrét objektumtól függ, tehát mást jelent pirítós esetén és mást rántotta esetén."

"Áttekintve az eddigieket megállapítható, hogy az analízis fázisában felállítottunk egy alapkövetelményt: a berendezésnek tetszőleges reggelire fogyasztható étel megsütésére alkalmasnak kell lennie. A tervezés fázisában néhány további követelményt is meghatározunk.

Például: szükségünk van egy olyan objektumorientált programozási nyelvre, amely megengedi a többszörös öröklést. A felhasználók természetesen nem szeretnék, hogy a rántotta kihűljön, miközben sül a pirítós, nyilvánvaló tehát, hogy párhuzamos feldolgozásra van szükség."

"Nem szabad elfeledkeznünk a felhasználói felületről sem. A pirítós kiemelésére szolgáló kar nem eléggé univerzális, a gomb pedig félreérthető. A felhasználók csak akkor fogják megvenni a terméket, ha az felhasználóbarát, azaz grafikus felhasználói felülete van.
Bekapcsolás után egy hurkatöltő jelenne meg a képernyőn, amire rákattintva az egérrel, a reggelikészítő "Az operációs rendszer töltése folyamatban van..." üzenetet írná ki. A felhasználók ezután egy párbeszédpanelen megjelenő listából az egér segítségével választhatnák ki, hogy mit szeretnének reggelizni."

"Mivel a szükséges szoftvert előrelátóan már a tervezési fázis kezdetén meghatároztuk, már csak annyi van hátra, hogy kiválasszuk a megvalósításhoz szükséges hardvert. Egy 3 GHz-es Intel Core i7, 16 gigabájt memóriával, 256 gigabájt SSD kapacitással és SVGA monitorral valószínűleg megfelelne a célnak. Ha többfeladatos, objektumorientált, beépített grafikus felülettel rendelkező korszerű operációs rendszert választunk, akkor a működtető szoftver megírása már igazán semmiség. Gondoljunk arra, hogy most milyen komoly nehézségeink lennének, ha rövidlátó módon először a hardvert választottuk volna ki, és most egy nyolcbites mikrokontrollerrel szenvednénk!"

Miután a király mindkét tanácsadóját meghallgatta, lefejeztette a programozót, és azóta is boldogan élnek ha meg nem haltak.