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. 2. 3. 4.
Probléma leírása és adat definíció A program viselkedésének informális leírása A viselkedés bemutatása példákkal 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
Probléma megfogalmazása • Példa: – 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!!!
Programozási nyelv • Szintaktika – 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ül a processzor utasításkészletére épül – Gépi kód: A memóriában lévő utasításkódokat közvetlenül a programozó adja meg. – Assembly: A közvetlen kódok helyett rövid, könnyen megjegyezhető szavakat alkalmazunk a könnyebb megjegyzés, a jobb á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é a még mindig a gép közvetlen utasításkészletére épülő programozást.
Programozási nyelvek • Magasszintű: Cél a jobban áttekinthető minél egyszerűbb, gyorsabb programozás, mely érdekében kompromisszumot kell kötni a futássebesség és a tá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, AddisonWesley 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
Űrsikló • Flexibilis szoftver: – 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