170 likes | 372 Views
Przycisk. Przycisk. 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. MS Windows wieloprocesowy system operacyjny
E N D
Przycisk Przycisk 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
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 a 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
VB C# C++ L ...... CVB CC# CC++ CL ...... PAKIET ( CIL .exe , .dll ) Środowisko .NET
P1 P2 Pn ..... CLASS LIBRARY LOADER JITC BIN EXEC N E T . F r a m e w o r k
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) classProgram {staticint 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
classProgram { staticint 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 __abstractklasa abstrakcyjna __boxopakowanie (stos sterta) __delegatezamiana wsk. funkcji na delegację __eventzgłoszenie zdarzenia __finallyblok końcowy obsługi wyjątków __gctyp podlega zbieraniu śmieci __identifierodróżnia identyfikatory od słów kluczowych C++ __interfacewszystkie funkcje składowe są czystymi funkcjami wirtualnymi __nogcnie podlega zbieraniu śmieci __pinzabrania przesuwania przez gc __propertytworzy właściwość __sealednie może być klasą bazową __try_castrzutowanie z ew. wyjątkiem __typeoftyp obiektu zarządzanego __valueutworzenie wartości (stos)