Bevezetés+a+programozásba

= **1.A program életútja: a programkészítés lépései** =

A szoftvereket komoly fejlesztőmunka eredményeképpen állítják elő. Egy program létrehozása ugyanúgy zajlik, mint bármely más termék előállítása. A gyárakban a különböző képzettségű személyek más és más munkafázisokat végeznek el, ugyanígy a programok készítése is ezt kívánja meg. A gyártás egy folyamaton való végighaladást jelent: a program életútjának szokás nevezni.

A program megrendelőjében megfogalmazódik az igény, hogy egy feladatot számítógép segítségével szeretne megoldani. Ez a feladat-megfogalmazás vagy köznapi nyelven, vagy a megrendelő szakmai nyelvén fogalmazódik meg. A program megvalósíthatóságát egy speciális képzettségű programozó, a rendszerszervező vizsgálja meg. Ő a megrendelő szakmáját olyan szinten ismeri, hogy eldöntheti, a feladat valóban számítógépesíthető-e. Ha az, akkor felméri a gépesítés hardverigényét, illetve hogy létezik-e már a probléma megoldására kész szoftver.A valóságban ez a pár sorban leírt tevékenység néha éveket is igénybe vesz, hisz pl.egy valódi gyár működésének átlátása és átszervezése a számítógépesítés igényei szerint igen összetett feladat. Ha a megrendelő nem lép vissza ez idő alatt, akkor elkészül egy szakmai szótár, és egy, a jelenlegi rendszerre és az alkalmazói elképzelésre épülő modell.A modell kialakítása és elfogadása után következik a feladat számítástechnikailag pontos meghatározása. Ezen a ponton lép be a programozó, aki a feladat megvalósítását elvállalja. A rendszerszervező, a programozó és a megrendelő együtt alkotja meg azt a végleges modellt, amelynek alapján a tényleges szoftver működni fog. Pontosan meghatározzák az alkalmazás feltételeit és határait, és igyekeznek úgy kialakítani azt, hogy továbbfejleszthető is legyen. Az elhangzottakat a lehető legkörültekintőbben és igen nagy pontossággal leírják, mert ez lesz a későbbi munka alapja.Az elkészült specifikáció a szakmai nyelv mellett már tartalmazza a programozói szóhasználatot is, de a felhasználó számára érthető és ellenőrizhető formában.A programfejlesztési modell kiválasztása is itt történik meg, amit befolyásol a feladat jellegén kívül a megrendelő tájékozódási igénye és a programozó rutinja.
 * //1.Feladatkitűzés//**
 * //2.Specifikáció//**

Akármelyik módszer mellett is döntünk, a program legfőbb részeit valamilyen módon meg kell terveznünk. E tervek leírása különösen fontos a későbbi teszteléshez, de a dokumentációk megírásához is leengedhetetlen.A program tervezője kialakítja a menüszerkezetet, elkészíti a képernyőterveket, meghatározza az adatábrázolási módokat. A feladatokat megvalósító algoritmusokat is most készítik el. A már korábban megismert leírási módok közül az élőbeszédhez közelebb álló mondatszerű leírás és a precízebb alapot adó struktúra-diagram alkalmazása a legelterjedtebb.A program szerkezete, fontosabb adatáramlásai, az egyes változók érvényességi köre és változási helyei ábrán jobban követhetők. A megtervezett program megvalósítása már egy konkrét programozási nyelven történik. Ennek kiválasztásánál szerepet játszik a kódoló képzettsége, a programozási feladat jellege, a már rendelkezésre álló programrészletek nyelve, és nem utolsó sorban a programot futtató hardver. A programírás sarkalatos lépése. A programírók többsége megelégszik bizonyos fokú teszteléssel, aminek az az oka, hogy jelenleg a programok többsége a tudományos módszerek pontosságával nem is ellenőrizhető. Ehelyett nagyon alaposan tesztelnek, főleg az emberi életet veszélyeztető, vagy nagy értéket képviselő berendezéseket irányító programok esetében. A helyességigazolás igen fiatal tudományterület, módszerei nagyban hasonlítanak a századfordulón kialakult matematikai bizonyítási módszerekre. A programozók többnyire nem is szívesen végzik el ezt a lépést, inkább speciális képzettségű matematikusokra bízzák.
 * //3.Algoritmustervezés//**
 * //4. Kódolás//**
 * //5. Helyességigazolás//**

A tesztelés alapos előkészítése esetén gyakorlatilag mechanikusan elvégezhető lépés.Ha a kapott tárgykód mellett továbbra is figyelemmel kísérjük a forráskódot, akkor fehér doboz tesztelésről, ha nem, akkor fekete doboz tesztelésről beszélünk. Ez utóbbi azt jelenti, hogy nem kísérjük nyomon a programban lezajló folyamatokat elemi lépésenként, hanem csak azt figyeljük, hogy mit fogad el bemenetként a vizsgált programrészlet, és alkalmas bemenet esetén a várt kimenetet szolgáltatja-e valóban. Amennyiben a fekete doboz teszteléssel hibát fedezünk fel, annak javításához célszerű a fehér doboz tesztelést alkalmazni, azaz a vélhetően hibát okozó részleten belül nyomon követni az elemi utasítások végrehajtását, a változók módosulását. Ehhez nyújt nagy segítséget a legtöbb fejlesztői környezetbe beépített nyomkövető (debugger) rendszer.Nagyban megkönnyíti a munkánkat, ha pontosan kidolgozott érintkezési felületeket alkalmazunk, azaz jól strukturáljuk programunkat. Ekkor az egyik részben előforduló hiba – nagy valószínűséggel – nem fogja érinteni a többi kódrészt. Ha a hiba tervezési okokból lépett fel, akkor ahhoz a szinthez kell visszanyúlnunk a módosításban, ahol a helytelen döntés megtörtént. Egy programhoz két dokumentációnak kell elkészülnie: az egyik a leendő felhasználók számára, a másik a későbbi fejlesztőknek.A felhasználói kézikönyv tartalmazza a program céljának közérthető nyelven való leírását, a felhasználó számára fontos jellemzőit, a programban előforduló speciális elnevezéseket. Röviden, de precízen leírja az installálás menetét, egy mintaproblémán keresztül bemutatja a program használatát, szolgáltatásait, alkalmazási körét. Tartalmaz általában egy menürendszer leírást, bemutatja a jellegzetesebb képernyőterveket.A másik dokumentum a fejlesztői kézikönyv, amely tartalmazza az összes korábbi fázisban keletkező dokumentációt. Tartalmazza az esetleges továbbfejlesztési terveket, irányokat és a már beépített lehetőségeket leíró részeket. A fejlesztői kézikönyv abban és csak abban az esetben kerül a felhasználó birtokába, ha a szerződés szerint azt is megvásárolja. Ez gyakorlatilag a program feletti teljes rendelkezési jog átadását jelenti a felhasználónak!!
 * //6.Tesztelés//**
 * //7.Dokumentálás//**

A programozó és a felhasználó számára a legfontosabb pillanat: a felhasználó ekkor ismeri meg a véglegesnek szánt verziót, és veszi teljes mértékben birtokba. Ha a program használata folyamán rendellenességek tapasztalhatók, akkor a fejlesztők kötelessége azokat kijavítani garanciális időn belül. Gyakrabban fordul elő, hogy a körülmények változása miatt módosításokat kell végezni a programon, vagy a megváltozott igények miatt fel kell frissíteni azt.A karbantartást és a fejlesztést a hardverkörnyezet módosulása, a változó operációs rendszerek gyakorlatilag ki is kényszerítik. A karbantartás eredményeképpen kapott új változatokat két csoportra szokás bontani. A frissített verzió (update) a hibák javítását, vagy a program újabb adatokkal való feltöltését jelenti. Az átdolgozott verzió (upgrade) a továbbfejlesztett, bővített funkciókra utal.
 * //8.Átadás//**
 * //9.Karbantartás//**

2.Algoritmus fogalma Az **algoritmus** szó és fogalom a matematikából ered, de a számítástechnikai kultúra elterjedése, popularizálódása ültette át a köznyelvbe. **Algoritmuson ** vagy inkább **eljáráson** olyan megengedett lépésekből álló módszert, utasítás(sorozato)t, részletes útmutatást, receptet értünk, amely valamely felmerült probléma vagy problémaosztály megoldására alkalmas. Például eljárást, algoritmust, receptet lehet adni egy asztal (vagy egyéb bútor) összeszerelésére, valamilyen élelmiszer, mondjuk sajt (vagy bármilyen tejipari termék) elkészítésének módjára, a Deák térről a Lánchídhoz vezető út megtalálására, vagy éppen két egész szám legnagyobb közös osztójának kiszámolására. A számítógépes programok általában tartalmaznak algoritmusokat, ezekkel utasítják a gépet az adott feladat végrehajtására. A konkrét algoritmus megadásához tudni kell, hogy mik a megengedett lépések. Enélkül az az egy lépés is algoritmus lehetne, hogy süssük meg a kenyeret. Csak a megengedett lépésekkel lehet az algoritmuson bonyolultsági elemzést végezni.

=
A hatékony programkészítés előfeltétele a könnyen értelmezhető és kódolható algoritmus-megadási mód. Az élőbeszéd hosszú és nem precíz, függ a megadó és az olvasó előismereteitől, értelmezési módjától. Ezt a módszert csak abban az esetben célszerű alkalmazni, ha laikus számára kell megfogalmazni az algoritmust.=====

=
A mai modern programozási nyelvek elveinek és működésének jobban megfelel a mondatszerű leírás, amely pontosan meghatározott formalizmusokat használ, a megadás egyértelmű, könnyen átírható programkódokká.=====

=
A rajzos megadás tulajdonképpen a fenti módszerek beszélt nyelvtől független megadási módja, a struktúra-diagram is egy ilyen megadási mód. =====



=

 * //__Ciklikus__//**: az utasítások sorozata (ciklusmag) többször ismétlődik. Beszélünk számlálásos (FOR-ciklus), előltesztelő (WHILE-ciklus, a feltétel a ciklusmag előtt van) és hátultesztelő (REPEAT-ciklus, a ciklusmag mögött található a feltétel) ismétlési (ciklikus) szerkezetről.=====

1.ábra - vonalas szerkezet 2.ábra - elágazó szerkezet 3.ábra - előltesztelő szerkezet 4.ábra - hátultesztelő szerkezet

3.Programozási nyelvek A **programozási nyelv** a számítástechnikában használt olyan, az ember által olvasható és értelmezhető utasítások sorozata, amivel közvetlenül, vagy közvetve (például: gépi kódra fordítás után) közölhetjük a számítógéppel egy adott feladat elvégzésének módját. A program az algoritmus megvalósítása a programozás nyelvén. A programírás folyamatát nevezzük programozásnak. A programozásnak 3 szintje létezik: 1. gépi nyelv szintjén 2. Assembler segítségével 3. magas szintű nyelvek valamelyikén

__**1.gépi nyelv**__ A gépi kód valójában nem nyelv, mivel az a gép számára közvetlenül értelmezhető adatsort jelenti. Nevezik még alacsony szintű nyelvnek is. Bináris számokból áll, mert a számítógép cask ezeket a jeleket tudja értelmezni.

__**2.Assembler**__ A //gépi kódhoz,// vagyis az adott számítógép saját nyelvéhez legközelebb álló nyelveket nevezzük //assembly// nyelveknek: ezen a nyelven a legnehezebb programot írni, mert azt teljesen a gép architektúrájához alakítva, gépi logika szerint kell elkészíteni. Cserébe az assembly nyelven írt programok a leggyorsabbak. Az assembly nyelven írt programot gépi kódra az „assembler” (fordítóprogram) fordítja le. (Ebből látható, hogy igazából az assembly is egy //fordított nyelv,// de mégsem soroljuk a fordított nyelvek közé, mivel a legtöbb esetben a „fordított nyelvek” az adott nyelvről assembly-re fordítanak (belsőleg), és utána azt alakítják át gépi kóddá.) Minden egyes processzor-családnak saját assembly nyelve van (vagy nyelvei vannak).

__**3.magas szintű nyelvek**__ A magas szintű nyelvek esetén valamilyen absztrakció segítségével az emberi logikához vagy a problématérhez közelebb eső nyelven fejezzük ki a programunkat. Elsősorban az angol nyelvhez állnak közel.

= **4.Szintaxis és szemantika** =

A számítástechnikában egy programozási nyelv **szintaxisa** azt a szabályrendszert jelenti, amely meghatározza, hogy az adott nyelvben hogyan lehet az egyes nyelvi elemeket, utasításokat létrehozni. A szintaxis meghatározza a nyelv tágabb értelem vett ábécéjét, a használható szavakat – ez a nyelv kulcsszókészlete –, és megadja a nyelvi elemek felépítési szabályait (amelyeket a nyelv fordítójának //szintaktikai elemzője// ellenőriz). A nyelv szintaxisának leírására a metanyelvek szolgálnak.

A **szemantika** (magyarul **jelentéstan**, ám ez a terminológia az utóbbi időkben egyre kevésbé pontos) a nyelvészet egyik részterülete, amely a nyelvi formák (szavak, szimbólumok stb.) jelentésével illetve jelentésváltozásaival foglalkozik. Eredetileg csak szójelentéssel foglalkozott, de ma már a mondatjelentést is vizsgálja. Hasonlóképpen a formális nyelvek, programozási nyelvek elméletében a szemantika az adott formális nyelv, programozási nyelv szintaxisa által meghatározott szavak, kifejezések jelentését definiáló szabályok összessége.

= **5.Programozási nyelvek felosztása** =

A programozási nyelveket több szempont szerint is lehet csoportosítani. - alacsony szintű nyelvek (gépi nyelv és Assembler) -magas szintű nyelvek (Pascal, Delphi, Fortran, ADA, Basic, C, C++, Java….) __**2.a fordítás módja alapján:**__ -compilert használó nyelvek -interpretert használó nyelvek __**3.alkalmazási terület alapján**__ -specializált – szűkebb problémaosztályt képesek cask megoldani. Pl.Fortran, Cobol, Refal, Lisp, Modula -univerzális (általános) – általános rendeltetésűek. Pl.Pascal, C, C++, Java, Basic, Ada stb. __**4.a probléma megoldása alapján**__ -procedurális – magas szintű algoritmikusság jellemzi őket, pl.Assembler, Fortran, Basic, Pascal, Ada, C/C++ ,stb. -nem procedurális – Prolog, Lisp
 * __1.a számítógép architektúrájához való közelség alapján:__**