II. Programozási technológiák 1
II.1 A gépi kódú program Az algoritmuslépések kódja + memória címek. II.2 Programkészítő programok MOV AX,1234h ;0B8h 34h 12h - szám (1234h) az AX reg.-be MUL WORD PTR [5678h] ;0F7h 26h 78h 56h - szor a cím adatával (extra szegmensen) MOV [5678h],AX ;0A3h 78h 56h - AX a címre Forrásnyelvű program Fordító/Interpreter Futtatható program Programozási nyelv generációk Generation of Language 1GL: gépi kód 2GL: assembly (mnemonic) 3GL: magas-szintű procedurális FORTRAN, PASCAL, C 4GL: probléma orientált Funkcionális: LISP (LISt Processing), Logikai: PROLOG (PROgraming LOGics), Adatbázis kezelés: SQL, Objektum-orientált: C++, JAVA. C#, Komponens alapú fejlesztők. 5GL: természetes nyelvek??? 2
II.3. Adatok és programok II.3.1 Adatkezelés Egészek Case sensitive [const readonly] típus_név nev[, ][ = kez_dért] byte / sbyte 0..255 / -128..127 1 byte ushort / short 0..65 535 / -32 768..32 767? 2 byte uint, int 0.. 4 294 967 295 / -2 147 483 648..2 147 483 648.. 4 byte Logikai típus bool false..true true, false 1 byte Lebegőpontos (valós) típus float -3.4 10 38.. 3.4 10 38 4 byte double ±5.0 10 324.. ±1.7 10 308 1.3, 2.1e6, 3.4F, 4.2L 8 byte decimal (-7.9 x 10 28.. 7.9 x 10 28 ) / (10 0.. 28 ) 28, 29 számjegy Betű char A, \n, \t (!!!) 2 byte string Alma n*2byte Felsorolt enum enum szam {egy, ketto, harom //0,1,2 enum ez {a=6,b=11 //0..15 szam.ketto 3
II.3.2 Alap algoritmus elemek II.3.2.1 Rákövetkezés (konkatenáció) int i = 3; int j = 4; int k = i + j; II.3.2.2 Választás (alternáció) if (i > j) { k = i - j; else { k = j - i; II.3.2.3 Ciklus (iteráció) i = 0; k = 0; while (i < 10) { k += i++; p i h p i/h h/i 5
II.4. Alprogramok, függvények típus nev ([paraméterek]) { // függvénytörzs [lokális definíciók, deklarációk] [utasítások] [return [érték]; // ha van] call fv call fv fv return SP nev([param1, param2, ]); i = nev([param1, param2, ]); int main () { 6
II.5. Objektum-osztály Rejtett adatok a középpont koordinátáinak Program Adat Objektum Konstruktor Property - Metódusok a középpont adatainak írására, olvasására Virtuális kerületszámítás Virtuális területszámítás 7
Rejtett adat a sugárra Property - Metódus a sugár írására, olvasására A kör kerületszámítása A kör területszámítása Rejtett adatok az oldalakra Property-k - Metódusok az oldalak írására, olvasására A téglalap kerületszámítása A téglalap területszámítása 8
// II.5.1 Osztály információ struktúra minta // példány adott struktúrájú adathalmaz class Síklap { // Síklap osztály // Belső tárolók // II.5.2 Adatmezők adatok tárolása protected double kx; // A kpont x koordinátájának tárolója protected double ky; // A kpont y koordinátájának tárolója // Nem publikus tulajdonságok // II.5.3 Tagfüggvények, metódusok adatok feldolg // speciális metódusok konstruktor, destruktor public Síklap() { // Konstruktor kx = 0; // Attribútumok ky = 0; // Attribútumok // II.5.4 Attribútumok szabályozott hozzáférés public double ox { // A középpont x koord. get { // Olvasás return kx; set { // Írás kx=value; 9
public double oy { // A középpont y koordinátája get { // Olvasás return ky; set { // Írás ky=value; // II.5.5 Az adatrejtés elve - (private, public, protected) saját, // nyilvános és védett elemek // II.5.6 Sokoldalúság az osztályhierarchiában // korai és késői kötés virtuális és dinamikus függv // absztrakt elemek public virtual double ker() { // Alap kerület return 0; public virtual double ter() { // Alap terület return 0; // A síklap alaposztály 10
// II.5.7 Osztályok hierarchiája egyszeres (és többszörös) öröklődés // Például a körlap class Körlap : Síklap { // Körlap oszt. a siklap leszarm. // Belső tároló private double r; // A sugár tárolója public Körlap() { // Konstruktor kx = 0; // Attribútumok ky = 0; // Attribútumok public double sugar { // A sugár tul. get { // Olvasás return r; set { // Írás r = value; // késői kötés virtuális és dinamikus fv public override double ker() { //A ker. return 2*r*Math.PI; public override double ter() { //A ter. return Math.PI*Math.Pow(r, 2); // Az egyik leszármazott 13
// Például a téglalap class Téglalap : Síklap { // Teglalap osztály a siklap leszarm. // Belső tárolók private double a; private double b; public Téglalap() { // Konstruktor kx = 0; // Attribútumok ky = 0; // Attribútumok public double a_oldal { // Az a_oldal get { // Olvasás return a; public Körlap() { // Konstruktor set { // kx Írás = 0; // Attribútumoka = value; ky = 0; // public Attribútumok double b_oldal { // A b_oldal get { // Olvasás return b; set { // Írás b = value; public override double ker() { //A kerület return 2 * (a + b); public override double ter() { //A terület return a*b; 14
// Példa körlap és téglalap példány // Körlap k = new Körlap(); k.ox = 10; k.oy = 10; Console.Write("A kör sugara="); k.sugar=convert.todouble(console.readline()); Console.WriteLine("A kör kerülete={0,8:f2",k.ker()); Console.WriteLine("A kör területe={0,8:f2",k.ter()); // Téglalap t = new Téglalap(); Console.Write("Az a oldal="); t.ox = 0; t.oy = 0; t.a_oldal = Convert.ToDouble(Console.ReadLine()); Console.Write("A b oldal="); t.b_oldal = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("A téglalap kerülete={0,8:f2", t.ker()); Console.WriteLine("A téglalap területe={0,8:f2", t.ter()); // 17
II.6. A Windows működése eseményvezérelt program Windows Message queue WinMain Message Loop CallBack namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); private void button1_click( object sender, EventArgs e) { Console.Beep(); Case DefWindowProc non pre emptive multitasking 19
II.7 Windows multiprogramozás (preemptive) Rendszer és alkalmazás várakozó sorok Eszközök Nyomtató Lemezek Billentyûzet Egér Üzenetek Várakozó sor Rendszer Alkalmazások Üzenetek 32 bites szál várakozó sor 32 bites szál várakozó sor 32 bites szál várakozó sor elsõdleges 16 bites alk. várakozó sor Időszelet osztás változó prioritásokkal System VM MS-DOS VM MS-DOS VM 32 bites alkalmazások Szál1 pr=4 16 bites alkalmazások Szál3 pr=16 Szál4 pr=20 Szál5 pr=12 Szál2 pr=20 Elsõdleges scheduler 2 4 Idõszelet osztás 20
II.8. Rapid Application Development Environment Komponensalapú fejlesztés: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); private void button1_click(object sender, EventArgs e) { button1.text = "alma"; BackColor = System.Drawing.Color.Red; 21
II.9. Microsoft.Net Célok: Biztonságos programfejlesztés Több (Objektum és komponens orientált) nyelv támogatása Platform-független kialakítás Hálózati megoldások CLI Common Language Infrastructure C# Managed C++ VB.Net JScript J# Stb. CIL Common Web-szolgáltatások Létező műveletek (fájlnyitás) Web/Windows felhasználói felület Adatok, többszintű típusellenőrzésel (XML - extensible Markup Language) Alaposztályok CLR Common Language Runtime (kód futtatás virtuális gépen) Új, csak a CLR műveletek, (szemétgyűjtés) Intermediate Language CTS Common Type Strudcture JIT Just In Time fordító Operációs rendszer 22