PROGRAMOWANIE WIZUALNE ● metoda tworzenia programu za pomocą narzędzi umożliwiających wybór standardowych elementów z menu z automatyczną generacją dużej części kodu źródłowego Przycisk
MS Windows wieloprocesowy system operacyjny sprzęg użytkowy C kilka tysięcy funkcji programowanie współbieżne START czy jest komunikat NIE obsługa komunikatu TAK czy kom. zakończenia NIE TAK STOP
Tworzenie Programów dla Środowiska MSWs · Application Programming Interface (API) · Software Development Kit (SDK) · biblioteki klas : OWL (Borland), MFC (Microsoft), ATL (Microsoft) · przekład programu (.exe) zawiera : — treść binarną (rozkazy, dane) — zasoby : ikony, kursory, mapy bitowe, menu, akceleratory, dialogi, teksty
MSWs API MFC A p l i k a c j API Aplikacja Źródłowa
class Baza { public : int x; } // class Potomek : public Baza { public: int y; } Baza* ob = new Potomek; ob -> x; // ok ob -> y; // błąd (( Potomek* ) ob ) -> y ; // ok
Środowisko .NET ...... VB C# C++ L CVB CC# CC++ CL PAKIET ( CIL .exe , .dll )
N E T . F r a m e w o k P1 P2 Pn ..... CLASS LIBRARY LOADER JITC BIN EXEC
pakiet ( assembly ) a - manifest b - metadane opisujące typy c - przekład w CIL d - zasoby mogą być w wielu plikach pakiet.exe PE Header a + b + c + d Start
wspólny system typów CTS wspólna specyfikacja języka CLS biblioteka klas platformy FCL przestrzenie nazw zbieranie śmieci wspólne środowisko wykonawcze CLR kod zarządzany i nie zarządzany
CIL (MSIL) class Program { static int Main(string[] args) { int a = 5, b, c; c = a + 3; b = c + 2; return b; } IL_0000: ldc.i4.5 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: ldc.i4.3 IL_0004: add IL_0005: stloc.2 IL_0006: ldloc.2 IL_0007: ldc.i4.2 IL_0008: add IL_0009: stloc.1 IL_000a: ldloc.1 IL_000b: ret
ILDASM C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin .method private hidebysig static int32 Main(string[] args) cil managed { .entrypoint // Code size 12 (0xc) .maxstack 2 .locals init ([0] int32 a, [1] int32 b, [2] int32 c) // MSIL instructions } // end of method Program::Main
Plik .exe ( Release ) File size : 16384 PE header size : 4096 (496 used) (25.00%) PE additional info : 1075 ( 6.56%) Num.of PE sections : 3 CLR header size : 72 ( 0.44%) CLR meta-data size : 1404 ( 8.57%) CLR additional info : 0 ( 0.00%) CLR method headers : 13 ( 0.08%) Managed code : 19 ( 0.12%) !!!!! Data : 8192 (50.00%) Unaccounted : 1513 ( 9.23%)
Asembler int a = 5, b, c; 00000015 xor edi,edi // a 00000017 xor esi,esi // b 00000019 xor ebx,ebx // c 0000001b mov edi,5 // a c = a + 3; 00000020 lea eax,[edi+3] 00000023 mov ebx,eax b = c + 2; 00000025 lea eax,[ebx+2] 00000028 mov esi,eax
class Program { static int Main(string[] args) double a = 5, b, c; c = a + 3; b = c + 2; return 0; } }
double a = 5, b, c; 0000001a fldz 0000001c fstp qword ptr [esp+8] // a = 0 00000020 fldz 00000022 fstp qword ptr [esp+10h] // b = 0 00000026 fldz 00000028 fstp qword ptr [esp+18h] // c = 0 0000002c fld dword ptr ds:[03731140h] // 5 00000032 fstp qword ptr [esp+8] // a = 5 c = a + 3; 00000036 fld qword ptr [esp+8] 0000003a fadd dword ptr ds:[03731148h] // a + 3 00000040 fstp qword ptr [esp+18h] b = c + 2; 00000044 fld qword ptr [esp+18h] 00000048 fadd dword ptr ds:[03731150h] // b + 2 0000004e fstp qword ptr [esp+10h]
MS Visual Studio ( MFC, C++ ) 1.0 , ..... , 6.0 MS Visual Studio.NET ( FCL, C# ) 2002 , 2003 , 2005 , 2008, 2010, 2012 NET . Framework , NET . Compact Framework 1.0 , 2.0 , 3.0 , 3.5, 4.0, 4.5, 5.0
C++ Kod Zarządzany słowo kluczowe opis __abstract klasa abstrakcyjna __box opakowanie (stos sterta) __delegate zamiana wsk. funkcji na delegację __event zgłoszenie zdarzenia __finally blok końcowy obsługi wyjątków __gc typ podlega zbieraniu śmieci __identifier odróżnia identyfikatory od słów kluczowych C++ __interface wszystkie funkcje składowe są czystymi funkcjami wirtualnymi __nogc nie podlega zbieraniu śmieci __pin zabrania przesuwania przez gc __property tworzy właściwość __sealed nie może być klasą bazową __try_cast rzutowanie z ew. wyjątkiem __typeof typ obiektu zarządzanego __value utworzenie wartości (stos)