Bevezetés Dr. Iványi Péter
Programozási készség Számos munka igényel valamilyen szintű programozási készséget Grafikus a képfeldolgozót, Zenész a szintetizátort, Programozó a számítógépet programozza. Nem csak készség, hanem szórakozás, illetve lehetőség a kreativitásra
Mit tanulhatunk? Kritikus olvasás Analitikus gondolkodás Kreatív szintézis Részletekre való odafigyelés Szinte mindenkinek meg kell tanulnia programozni!!!
A programozás lépései 1. Probléma leírása és adat definíció 2. A program viselkedésének informális leírása 3. A viselkedés bemutatása példákkal 4. A program általános szerkezetének, elrendezésének megtervezése 5. A konkrét program elkészítése 6. Tesztelés, hibakeresés és a részletek javítása * Dokumentáció készítés (felhasználói, fejlesztői)
A programozás lépései
Példa: Probléma megfogalmazása A 35 Celziusz fok hány Fahreinheit fok? A számítógép nem ért magyarul, így nekünk kell megtanulni a számítógép nyelvét, hogy utasításokat tudjunk adni neki. A számítógép nyelve a programozási nyelv (Az USA-ban a programok jogilag elfogadott emberi kifejezési formák! A szólásszabadság részei.)
Programkészítés A programozási nyelvek nagyon primitívek, a nyelvtanuk nagyon korlátozott Ráadásul a számítógépek is primitívek, mert csak azt csinálják amit mondunk nekik A legkisebb hiba a programban fatális hibát okozhat és nem a kívánt számítást végzi el A programozást gyakorolni kell Ezt fogjuk csinálni a félév során!!!
Szintaktika Programozási nyelv A forma, a reprezentáció Szemantika Az értelme, a koncepciója annak amit reprezentál Szintaktika Programozás I. Szemantika Problémaosztályok és algoritmusok
Bábel tornya
Programozási nyelvek Alacsony szintű: Gépközeli,közvetlenüla processzor utasításkészletére épül Gépi kód: A memóriábanlévő utasításkódokat közvetlenül aprogramozó adjameg. Assembly: Aközvetlen kódok helyett rövid,könnyen megjegyezhető szavakat alkalmazunk akönnyebb megjegyzés, ajobb átláthatóság kedvéért.jobban áttekinthető címzési módok,megjegyzések lehetősége, külön fordíthatóegységek,teszik könnyebbéamég mindig agép közvetlen utasításkészletére épülő programozást.
Programozási nyelvek Magasszintű: Cél ajobban áttekinthető minél egyszerűbb,gyorsabb programozás, mely érdekében kompromisszumot kell kötnia futássebesség és atárfoglalás kárára.
Programozási nyelvek
Programozási nyelvek osztályozása Procedurális nyelvek Kifejezések sorozatát hajtjuk végre mely valamilyen eredményhez vezet Változókat, ciklusokat használunk Program állapotok Funkcionális nyelvek Nem igazán használunk tárolt állapotokat Nem ciklusokat hanem rekurziót használunk Függvényeket hívunk és a visszatérési értékeket használunk Változók módosítása mellékhatás!
Programozási nyelvek osztályozása Objektum-orientált nyelvek Minden egy objektum Script nyelvek Általában interpretált, egyszerű elkezdeni, de könnyű elrontani Lehet procedurális, objektum-orientált, stb. Logikai nyelvek Deklaratív kijelentéseket teszünk és a program meghatározza a konzekvenciákat
Programozási nyelvek osztályozása Nem igazán osztályok, inkább Programozási stílusok Programozási módszerek, technikák Például: C-ben is lehet objektum orientált módon programozni
Még egy osztályozás Statikus nyelvek (compiler-linker) A fordító program a forrásprogramot gépi kódra fordítja és így a program futtatásához se a forráskód se a fordító nem kell. C, C++, Fortran, Common LISP Dinamikus nyelvek (interpreter) Az értelmező program a forrásprogramot utasításként értelmezi és hajtja végre. LISP, Scheme Just-In-Time (JIT) fordító Java, Python, Scheme
Programozási nyelvek másként
Programozási nyelv generációk Generation Language (generáció) 1GL: gépi kód 2GL: assembly (mnemonic) 3GL: magasszintű procedurális FORTRAN, PASCAL, C 4GL: probléma orientált Funkcionális: LISP Logikai: PROLOG Adatbázis kezelés: SQL Objektum-orientált: C++, JAVA 5GL: természetes nyelvek?? (szándék leíró nyelvek)
Szoftver projektek
IBM 360 Első általános célú operációs rendszer 1964 Több módszer helyességét is bizonyította a project: Frederick Brooks: The Mythical Man-Month, Addison- Wesley Professional, 1995 370-es sorozat és zseries is innen származtatható Még mindig kompatibilisek visszafelé
Apolló irányító rendszere MIT Instrumentation Lab 1969 Apollo 11 holdra szállásánál használták Raytheon computer 8 Kbyte memória
Híres projektek Mosaic az első Web browser Deep Blue sakk automata VisiCalc első táblázatkezelő UNIX operációs rendszer Linux kernel...
Windows és Linux Web szerver Web serverek: Apache Internet Information Services Egy HTML oldal megjelenítése Minden függvényhívásnál lehet probléma és elvben támadható a gép
Linux Web szerver
Windows Web szerver
Windows és Linux Web szerver
Űrsikló
Űrsikló Space Shuttle Onboard System 2004, 2005, 2006 verziók Mindegyik 420 000 sornyi kód Csak 3 hiba Utolsó 11 verzióban csak 17 hiba!!! Más szoftverben általában 5000 hiba lenne 260 ember írta 8-5 -ig munka Nincs túlóra, csak kivételes esetben
Űrsikló A szoftver csak annyira jó mint a specifikációja GPS használata a kódban A kódnak csak 1.5%-át érinti (6366 sornyi kód) A változtatáshoz tartozó specifikáció: 2500 oldal A teljes program specifikációja 30 kötet 40 000 oldal
Flexibilis szoftver: Űrsikló 3000 követelmény változás 1970 óta 382000 sornyi kód hozzáadása, változtatása, törlése 900 szoftver build, 175 patch
Félresikerült projektek 1. BAE Automated Systems Denver International Airport Csomagok kezelésére fejlesztett szoftver 1993 október Annyit hibázott, hogy csak 16 hónappal később nyittot meg a reptér Veszteség: 1.1 millió dollár naponta
Félresikerült projektek 2. Federal Aviation Administration, USA Háromszor próbáltak készítettni egy repülőirányitási rendszert Háromszor több száz millió dollár