David Bednárek Jakub Yaghob Filip Zavoral.
|
|
- Zdeněk Král
- před 7 lety
- Počet zobrazení:
Transkript
1 David Bednárek Jakub Yaghob Filip Zavoral
2 Samostatný jazyk standardizovaný ECMA snaha o maximální kompatibilitu s C++ CLI Common Language Infrastructure standard ECMA - virtual machine - framework (libraries) CLR Common Language Runtime implementace VM CIL Common Intermediate Language jazyk interpretovaný VM MSIL MSIL :-) konkrétní MS implementace CIL CTS Common Type System jednotný typový systém CLI.Net Framework Mono managed code spravovaný.net frameworkem přístup k CLI (.Net) knihovnám snadná interoperabilita C#, F#, VisualBasic,... COBOL, Eiffel, Mercury... MS implementace nadmnožiny CLI multiplatformní implementace CLI
3 Source code VB Compiler C# Compiler C++ Compiler Unmanaged Component Managed code Assembly IL Code Assembly IL Code Assembly IL Code Common Language Runtime JIT Compiler Native Code Operating System Services
4 Services Description Discovery Protocols Caching Configuration System.Web UI HtmlControls WebControls Security SessionState System.Windows.Forms Design ComponentModel System.Drawing Drawing2D Printing Imaging Text System.Data System.Xml OleDb SqlClient XSLT Serialization Common SQLTypes XPath System Collections Configuration Diagnostics Globalization IO Net Reflection Resources Security ServiceProcess Text Threading Runtime InteropServices Remoting Serialization
5 Type Value Types Reference Types Built-In Value Types Self Describing Types Pointer Types Interface Types Enumerations User-Defined Value Types (structs) Class Types Arrays User-Defined Classes Boxed Value Types Delegates
6 Ve skutečnosti dva nezávislé typové systémy native original ISO C++ managed fuj - manažovaný - řízený CTS string vs. String, vector vs. array Garbage collection pouze CTS managed heap handle není to ukazatel může se měnit nové operátory: gcnew ^ % reference vs. value type class Native {... ref class Managed {... { Native* n = new N; Managed^ m = gcnew Managed; delete n; handle native heap managed heap
7
8 Typy hodnotové referenční data primitivní typy, malé kolekce složitější struktury umístění přímo v paměti (zásobník) vždy na [managed] heapu přístup přímo přes [tracking] handle přiřazení, parametry hodnotou odkazem dědičnost ne jednoduchá (více interfaces) copy constr ano ne default sémantika stack heap s.: boxing heap stack s.: autoalokace value struct B { int x; int main() { B b; b.x = 0; ref class A { int f(); int main() { A^ a = gcnew A; a->f();
9 ref class, ref struct nesmí obsahovat nemanaged struktury nemají automatický copy constructor a operator = jednoduchá dědičnost, vícenásobná dědičnost interface value class, value struct nepodporují dědičnost! enum class rozšíření enumu o několik metod - ToString value type interface class abstract class bez dat možnost vícenásobné dědičnosti array typované vícerozměrné pole generic
10 Referenční typy proměnné reference na data neinicilizované: nullptr přístup přes nullptr NullReferenceException přiřazení kopírování referencí, nikoliv dat není automaticky definován copy konstruktor konec existence poslední reference někdy garbage collection možná i zásobníková sémantika technicky ale stále heap, na konci platnosti destruktor ref class A { int f();... { A^ ra = gcnew A; A va; ra->f(); va.f(); ra va ra va ra destruktor va někdy možná GC a finalizer
11 Hodnotové typy proměnné vlastní data přiřazení kopírování dat nelze dědičnost boxing - alokace na heapu pozor na automatické konverze value struct B { int x; fnc( B^ b) { b->x = 2; rb vb: 1 rb: 1 rb vb: 1 b rb: 2 b: 2 { B^ rb = gcnew B; B vb; rb->x = vb.x = 1; fnc( rb); fnc( vb); boxing vb
12 handle T^ x = gcnew T; x->a, (*x).a unmanaged: * value class T; T a; a b tracking reference T% y = *x; T% y = var; y.a unmanaged: & T^ b = gcnew T; T^ c = %a; T% d = a; T% e = *b; T* f = &a; // T* g = b; pin_ptr<t> g = &*b; b c d e f a přímo nelze // T* h = &d; pin_ptr<t> h = &d; T& i = a; g h jen na objekty na zásobníku // T& j = *b; i technicky: ukazatel dovnitř managed objektu kopie do managed heapu!!
13 ISO C++ volá se metoda aktuálně konstruovaného podobjektu C++/CLI volá se metoda skutečného (vnějšího) objektu class A { A() : x(0) { x = f(); virtual int f() { return x + 1; int x; class B : public A { public: B() { x = f(); virtual int f() { return x + 2; A* b = new B; ref class C { public: C() : x(0) { x = f(); virtual int f() { return x + 1; int x; ref class D : C { public: D() { x = f(); virtual int f() override { return x + 2; C^ d = gcnew D; A() { A::f(), B() { B::f() x = 3 C() { D::f(), D() { D::f() x = 4
14 interface class IA { int f(); ref class A abstract : IA { public: A8() { x_ = 1; virtual int f() abstract; ~A8() { cout << "~";!A8() { cout << "!"; private: initonly int x_; ref class B8 sealed : A8 { public: virtual int f() override sealed {... rozhraní vícenásobná dědičnost rozhraní destruktor deterministicky finalizer - při GC nedeterministicky přiřazení pouze při inicializaci jen jednoduchá dědičnost tříd nepodporovány - default parametry - const metody ref class C { const int f(int x=1,int y=2);
15 ref class A { public: property int a; property int b { int get() { return x_; void set( int x) { x_ = x; property int c[int] { int get( int i) { return (x_>>i)&1; void set( int i, int x) { x_ ^= (x&1)<<i; property int default[int] { int get( int i)... private: int x_; A* a =... a->a = a->b; a->c[1] = a[2]; trivial property standard property indexed property default indexed property dědičnost virtual property read/write-only lze nadefinovat jen get/set static property přístup jen k statickým prvkům
16 Delegate ukazatel na funkci nebo metodu konkrétního objektu Event událost: zpráva odesílatel příjemci ref class MyEventArgs { delegate void MyDelegate( Object^ sender, MyEventArgs^ e); ref class WakeMeUp { void MyHandler( Object^ sender, MyEventArgs^ e) { static void StaticHandler( Object^ sender, MyEventArgs^ e) { deklarace eventu ref class EventSender { event MyDelegate^ Alarm; void OnAlarm( void) { Alarm( this, gcnew MyEventArgs); WakeMeUp^ w = gcnew WakeMeUp(); EventSender^ sender = gcnew EventSender(); sender->alarm += gcnew MyDelegate( w, &WakeMeUp::MyHandler); sender->alarm += gcnew MyDelegate( &WakeMeUp::StaticHandler); sender->onalarm(); sender->alarm -= gcnew MyDelegate( &WakeMeUp::StaticHandler); sender->onalarm(); typ delegáta handlery příjemce zavolání všech funkcí inicializace delegáta objektem a metodou statická metoda odebrání
17 pole built-in povinně referenční typ, vždy na heapu typované, pevně vícerozměrné, 0-based vícerozměrné indexy [i,j,k] iterace možná i přes iteratory, interior ptr a for each přiřazení reference, Array::Copy kopie array< String^>^ as = gcnew array<string^>(10); array< int, 2>^ a2d = gcnew array<int,2>(2,3); array< int, 2>^ a2d = gcnew array<int,2>(2,3) {{1,2,3,{4,5,6 array< int, 2>^ a2d = gcnew array<int,2> {{1,2,3,{4,5,6 array< int, 2>^ a2d = {{1,2,3,{4,5,6 int x = a2d[1,2]; interior_ptr<string^> is; for( is=&as[0]; is<=&as[9]; ++is)... *is... for each( String^ s in as)... s... IEnumerator^ es = as->getenumerator(); while( es->movenext())... es->current...
18 parametry součástí typu je typ prvků a dimenze, ne rozměry variabilní počet parametrů bezpečnější než va_arg kovariance pokud existuje konverze z A na B array<a> aa; array<b> bb; bb = aa; nepravidelné pole array<array<int> ^> ^jagged = gcnew array<array<int> ^>(4); for each (array<int> ^% ar in jagged) { int i = 5; ar = gcnew array<int>(++i); proměnný počet argumentů void f( array<int>^ a) {... vždy array^ int sum(... array<int>^ va) { int sum = 0; for each( int a in va) sum += a; return sum; int x = sum( 1, 2, 3, 4);
19 mnoho metod řada z nich přetížených AsReadOnly<T> BinarySearch Clear Clone ConstrainedCopy ConvertAll<TIn,TOut> Copy CopyTo CreateInstance Equals Exists<T> Find<T> FindAll<T> FindIndex<T> FindLast<T> FindLastIndex<T> ForEach<T> GetEnumerator GetHashCode GetLength GetLowerBound GetType GetUpperBound GetValue IndexOf Initialize LastIndexOf MemberwiseClone Resize<T> Reverse SetValue Sort ToString TrueForAll<T>
20 gumová pole ArrayList - polymorfní (Object^) absence typové kontroly pomalejší obecnější List - generic obrácené vlastnosti další CLI kontejnery using namespace System::Collections; ArrayList^ al = gcnew ArrayList(); al->add( 1); al->add( "hrusky"); al->add( 3.141); for each( Object^ o in al) Console::WriteLine( o); using namespace System::Collections::Generic; List<String^>^ sl = gcnew List<String^>; sl->add( "hrusky"); sl->add( "jine hrusky"); for each( String^ s in sl) Console::WriteLine( s);
21 String (CLI)!= string (STD) imutabilní jakákoliv operace vytváří novou instanci mutabilní StringBuilder všechny řetězce Unicode ( wchar_t) přiřazení = přiřazení referencí (mělká kopie) Copy - vytvoření kopie (hluboká kopie) porovnávání == (Equals) - porovnání hodnot ReferenceEquals - porovnání referencí konverze s = gcnew String( "Text"); String^ s = "Text"; s->chars[1] s = t + "."; String^ s = "123"; int x = Int32::Parse( s); int y = Convert::Parse( s); s = x.tostring(); string is = "isostring"; String^ ms = gcnew String( is.c_str()); is = (char*) Runtime::InteropServices::Marshal:: StringToHGlobalAnsi( ms).topointer(); pin_ptr<const wchar_t> ptr = PtrToStringChars( ms); is = static_cast<const wchar_t*>(ptr);
22 Šablony Templates řeší kompilátor výstup - varianty kódu pro různé typy kompilace jen použitých kombinací konstrukcí a typů Generika Generics řeší runtime výstup - jeden společný kód kompletní kompilace generic <typename T> ref class List { T Add( T t) {... co je tu zajímavého?... List<int> intl; intl.add( 1);
23 Šablony Generika Klíčové slovo template generic Kód pro každý použitý typ samostatný Vyhodnocování při kompilaci - normální typy společný runtime (JIT kompilace) Kompatibilita STL.Net, CTS, C#, VB Použití netypových parametrů ano ne Instance lišící se pouze typovým parametrem různé typy stejný typ Typové parametry cokoli normální typy nebo generika, nelze šablony Defaultní typový parameter ano ne Parciální a explicitní specializace ano ne Šablonové třídy jako typový parametr template<template<class T1> class T2> kontrola argumentů ne (zatím) constraints ano ne volání metod argumentů ano (kontrola při použití) odpovídající constraints
24 omezení množiny argumentů generik implementuje rozhraní / odvozená od jiné třídy gcnew constraint (default constr) value / reference type constraint kontrola při kompilaci interface class I { int f(); generic <typename T> where T : I, gcnew(), ref class ref class A { T t; int g() { return t.f(); ref class B : I { // A<int> ai; A<B^> ab; interface constraint implementuje interface reference constraint musí být referenční typ gcnew constraint musí mít default constr kontrola při překladu
25 System::Collections ArrayList BitArray DictionaryBase Hashtable SortedList Stack System::Collections::Generic Dictionary<TKey, TValue> HashSet<T> LinkedList<T> List<T> Queue<T> SortedDictionary<TKey, TValue> SortedList<TKey, TValue> SortedSet<T> Stack<T> SynchronizedCollection<T> SynchronizedKeyedCollection<K, T> SynchronizedReadOnlyCollection<T> polymorfní generické
26 metadata popisující vnější vlastnosti na mnoho konstrukcí - assembly, třídy, metody, parametry,... častá vazba na prostředí (.Net) metadata assembly [assembly:assemblytitleattribute("myproject")] [assembly:securitypermission( SecurityAction::RequestMinimum, UnmanagedCode=true)] hlášení kompilátoru [Serializable] ref class A { T t; [Obsolete("Do not use")] int g(); void f([out] String^% s); serializovatelnost do XML serializer->serialize(a) výstupní parametr není nutná inicializace (interoperabilita s C#)
27 Třída odvozená od System::Attribute přístup k datům pomocí reflexe definice vlastního atributu použití atributu přístup k hodnotám aplikovatelnost [AttributeUsageAttribute(AttributeTargets::Class)] public ref class OwnerAttribute : Attribute { property String^ Developer; [Owner(Developer="Ja Mocny")] ref class MyClass {... OwnerAttribute^ a = Attribute::GetCustomAttribute( MyClass::typeid, OwnerAttribute::typeid);... a->developer...
28 alternativa RTTI podpora.net jméno typu, vztahy dědičnosti, metody a properties, atributy,... using namespace System::Reflection; Type - přístup k typovým informacím Assembly^ ass = Assembly::LoadFrom("myass.dll"); array<type^>^ types = ass->gettypes(); for each( Type^ t in types) { WriteLine( t->tostring()); array<methodinfo^>^ methods = t->getmethods(); for each( MethodInfo^ m in methods) { WriteLine( "{1 {0", m->name, m->returntype->tostring()); array<parameterinfo^>^ params = t->getparameters();... Type^ t = String::typeid; t = obj->gettype(); t = Type::GetType("System::DateType");
29 aktivní operace vytváření typů z dll instanciace objektů vyvolávání metod Dynamické vytvoření typu a instance objektu Dynamické vyvolání metody Assembly^ ass = Assembly::LoadFrom("myass.dll"); Type^ t = ass->gettype("nejakytyp"); MethodInfo^ method = t->getmethod("metoda"); Object^ obj = Activator::CreateInstance( t); array<object^>^ paramlist =...; method->invoke( obj, paramlist); neshoda parametrů výjimka
30 .Net / C# like Console::WriteLine( "Hodnota {0 je {1", "jedna", 1); Console::WriteLine( "Hex {0:x8", 0x123456); String^ s; try { while(( s = Console::ReadLine()))!= nullptr) { int i = Int32::Parse( s); catch( FormatException^ e) {... StreamWriter^ sw = gcnew StreamWriter( "file.txt"); sw->writeline( "whatever"); sw->close();
31 C++/CLI C++ jak spojovat moduly a volat metody jak sdílet managed a native data nedělejte to - striktní rozhraní když už - speciální šablony C++/CLI C#,... jak spojovat moduly class library / add reference (.dll) jak volat metody class library jak sdílet data CTS
32 ref class A { int x_; A^ a = gcnew A; // int* y = &a->x_; pin_ptr<y> = &a->x_; *y = 99; interior_ptr<y> = &a->x_; *y = 99; připíchnutý ptr objekt se nehýbe vnitřní ptr do managed struktury hýbe se automaticky s objektem ref class A { int x_; class C { // A^ a; gcroot<a^> a; auto_gcroot<a^> b; int x() { return a->x_; { C c; umožní vkládat managed třídy do nativních nevolá ~A volá ~A při destrukci objektu
33 Project: C++ CLR Class Library namespace clilib { public ref class A { public: A() : x_(0) { int f() {... clilib.dll Project: C# Console App namespace App { class Program { static void Main(string[] args) { clilib.a a = new clilib.a(); int x = c.f(); Add Reference: clilib.dll
34 Klady interoperabilita -.Net, C#, CTS téměř plná kompatibilita s C++ managed code Zápory dva jazyky v jednom odlišné typové systémy podivná syntaxe a hlavně sémantika mnoho divných variant definovaných výčtem Use cases velký C++ projekt,.net služby (WPF) úzké rozhraní interoperabilita s C#, VB, F#, *#? first-choice language? zároveň požadavek na výkonnost a těsná integrace s GUI
35 Gordon Hogenson: C++/CLI - The Visual C++ Language for.net Marcus Heege: Expert C++/CLI -.Net for Visual C++ Programmers Nishant Shivakumar: C++/CLI in Action umět ke zkoušce zhruba se orientovat v problému
David Bednárek Jakub Yaghob Filip Zavoral.
David Bednárek Jakub Yaghob Filip Zavoral http://data.ksi.ms.mff.cuni.cz/svn/nprg051pub/html/nprg051.html C++ a vlastní C moduly obj, lib, dll/so jak linkovat C a C++ moduly jak dělat společné C/C++ headery
VíceDavid Bednárek Jakub Yaghob Filip Zavoral. http://data.ksi.ms.mff.cuni.cz/svn/nprg051pub/html/nprg051.html
David Bednárek Jakub Yaghob Filip Zavoral http://data.ksi.ms.mff.cuni.cz/svn/nprg051pub/html/nprg051.html Interoperabilita C++ a C, dll, C++ a.net, C++/CLI Nové normy a knihovny C++11/14/17, lambda výrazy,
VíceJakub Čermák <jakub@jcermak.cz> http://www.jcermak.cz. Microsoft Student Partner
Jakub Čermák http://www.jcermak.cz Microsoft Student Partner Úvod, příklady použití, trocha teorie Struktura aplikace Typy obecně, primitivní typy, speciální typy Podmínky, cykly, namespaces
VíceZáklady jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní
Základy jazyka C# doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Architektura.NET Historie Vlastnosti
VíceJakub Čermák <jakub@jcermak.cz> http://www.jcermak.cz. Microsoft Student Partner
Jakub Čermák http://www.jcermak.cz Microsoft Student Partner Úvod, příklady použití, trocha teorie Struktura aplikace Typy obecně, primitivní typy, speciální typy Podmínky, cykly, namespaces
VíceÚvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25
Programování v C# Úvodní slovo 1 / 25 Obsah přednášky Seznámení s předmětem Co je.net Vlastnosti.NET 2 / 25 Kdo je kdo Petr Vaněček vanecek@pf.jcu.cz J 502 Václav Novák vacnovak@pf.jcu.cz?? Při komunikaci
VíceÚvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39
Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy
VíceJazyk C# (seminář 6)
Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí
Více1 - Úvod do platformy.net. IW5 - Programování v.net a C#
1 - Úvod do platformy.net IW5 - Programování v.net a C# Strana 1 Obsah přednášky Objektově orientované paradigma.net Framework Základní rysy jazyka C# Strana 2 Objektová orientace C# implementuje základní
VícePREPROCESOR POKRAČOVÁNÍ
PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,
VíceGenerické programování
Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =
VíceJazyk C# (seminář 3)
Jazyk C# (seminář 3) Pavel Procházka KMI 15. října 2014 Motivace Představme si problém, jak napsat seznam v C# class IntList{... int value; public void IntList( int val, List next ){... V čem je to nevýhodné?
VíceTŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);
TŘÍDY POKRAČOVÁNÍ Události pokračování public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); class Bod private int x; private int y; public event ZmenaSouradnicEventHandler ZmenaSouradnic;
VíceOsnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)
Osnova přednášky Programové prostředky řízení Úvod do C# II. Členy (Members) Jmenné prostory (Namespaces) Třídy (Classes) Struktury (Structs) Pavel Balda Západočeská univerzita v Plzni, FAV, KKY 2 Členy
VícePB161 Programování v jazyce C++ Přednáška 4
PB161 Programování v jazyce C++ Přednáška 4 Dynamická alokace Kopírovací konstruktor Přetypování v C++ Nikola Beneš 12. října 2015 PB161 přednáška 4: dynamická alokace, kopírovací konstruktor, casting
VíceBázové třídy platformy.net
07 Strana 1 Obsah přednášky BCL Správa paměti v.netu IDisposable Kolekce Streamy Strana 2 BCL Base Class Libary základní sada knihoven frameworku jádro je v mscorlib.dll Obsahuje základní datové typy datové
VíceKomponenty v.net. Obsah přednášky
doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Rozdíl mezi COM a.net Distribuce komponent Programování
VícePB161 Programování v jazyce C++ Přednáška 4
PB161 Programování v jazyce C++ Přednáška 4 Přetěžování funkcí Konstruktory a destruktory Nikola Beneš 9. října 2017 PB161 přednáška 4: přetěžování funkcí, konstruktory, destruktory 9. října 2017 1 / 20
VíceFakulta elektrotechniky a informatiky Univerzita Pardubice 2014/2015. poslední přednáška a materiál k samostudiu
Fakulta elektrotechniky a informatiky Univerzita Pardubice 2014/2015 poslední přednáška a materiál k samostudiu @h0nza Raději už na začátku položte o otázku víc Vás to nic nestojí a ušetříte si spoustu
VíceProgramovací jazyk Úvod do programování v C#
Programovací jazyk C# Úvod do programování v C# Ing. Marek Běhálek Katedra informatiky FEI VŠB-TUO A-1018 / 597 324 251 http://www.cs.vsb.cz/behalek marek.behalek@vsb.cz .NET Framework Dramaticky zjednodušit
VíceÚvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31
Programování v C# Další jazykové konstrukce Petr Vaněček 1 / 31 Obsah přednášky Přetěžování metody operátory Generika Kolekce třídy rozhraní 2 / 31 Překrytí vs. přetížení Rozdíl ve způsobu deklarace metody/operátoru
VíceKolekce, cyklus foreach
Kolekce, cyklus foreach Jen informativně Kolekce = seskupení prvků (objektů) Jednu již známe pole (Array) Kolekce v C# = třída, která implementuje IEnumerable (ICollection) Cyklus foreach ArrayList pro
VíceZápis programu v jazyce C#
Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač
VícePB161 Programování v jazyce C++ Přednáška 10
.. PB161 Programování v jazyce C++ Přednáška 10 Šablony Nikola Beneš 23. listopadu 2015 PB161 přednáška 10: šablony 23. listopadu 2015 1 / 29 K zamyšlení Jaký je rozdíl mezi new int[10] a new int[10]()?
VíceProgramovací jazyk C# Úvod do programování v C#
Programovací jazyk C# Úvod do programování v C# Ing. Marek Běhálek Katedra informatiky FEI VŠB-TUO A-1018 / 597 324 251 http://www.cs.vsb.cz/behalek marek.behalek@vsb.cz.net Framework Dramaticky zjednodušit
VícePŘETĚŽOVÁNÍ OPERÁTORŮ
PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako
VíceProgramování v C++ 2, 4. cvičení
Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva
VíceProgramovací jazyk C# Úvod do programování v C#
Programovací jazyk C# Úvod do programování v C# Ing. Marek Běhálek Katedra informatiky FEI VŠB-TUO A-1018 / 597 324 251 http://www.cs.vsb.cz/behalek marek.behalek@vsb.cz.net Framework Dramaticky zjednodušit
VíceJazyk C# a platforma.net
Jazyk C# a platforma.net Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Syntaxe jazyka C# - 2. část BI-DNP Evropský sociální fond
VíceSOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ
SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ Vstupy a výstupy pokračování Kódování textů Texty (řetězce nebo znaky) v jazyce C# jsou v paměti uloženy v kódování označovaném běžně Unicode (kódová stránka 1200).
VíceKombinace C++ a.net jak a proč
Kombinace C++ a.net jak a proč Aleš Keprt Katedra informatiky, Přírodovědecká fakulta, Univerzita Palackého Tomkova 40, 779 00 Olomouc, Česká Republika Ales.Keprt@upol.cz Abstrakt. Před příchodem platformy.net
VíceDefinice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
VíceIRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33
Objekt jako proměnná Objekty a metody Objekt = proměnná referenčního typu vznik pomocí new, chování viz pole jako referenční proměnná minulý semestr Stack Heap objekt ref this 10 20 atr1 atr2 jinyobjekt
VíceÚvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
VíceDědění, polymorfismus
Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá
VícePB161 Programování v jazyce C++ Přednáška 10
PB161 Programování v jazyce C++ Přednáška 10 Šablony Nikola Beneš 27. listopadu 2017 PB161 přednáška 10: šablony 27. listopadu 2017 1 / 33 Šablony PB161 přednáška 10: šablony 27. listopadu 2017 2 / 33
VíceProgramování v C++ 1, 5. cvičení
Programování v C++ 1, 5. cvičení konstruktory, nevirtuální dědění 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
VíceJazyk C++ II. Šablony a implementace
Jazyk C++ II Šablony a implementace AR 2013/2014 Jazyk C++ II Úvod Dědičnost a kompozice nejsou vždy tou správnou odpovědí na požadavky znovupoužitelnosti kódu. Proto máme možnost definování určité třídy
VíceJazyk C++ I. Šablony 2
Jazyk C++ I Šablony 2 AR 2013/2014 Jazyk C++ I Třídy template class TVektor { T *a; int n; static int PocInstanci; public: TVektor(int _n = 0) : n(_n) { a = new T[n]; PocInstanci++; } ~TVektor()
VíceNPRG031 Programování II 1 / :47:55
NPRG031 Programování II 1 / 43 23. 2. 2016 11:47:55 Objekty Svět se skládá z objektů! Objekt = data + funkce (metody) konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty
VíceSimulace. Martin Pergel
Simulace Pokračování Seznamy Seznamy (spojové) a základní datové struktury byly probrány v Pascalu, protože v C# jsou už předimplementované: System.Collections.ArrayList je univerzální seznam. Instance
VíceURČITÝM ZPŮSOBEM PODOBNÉ
Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat jiné objekty (tělo obsahuje buňky, letadlo součásti). Objekty URČITÝM
Vícetypová konverze typová inference
Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie
VíceVíce o konstruktorech a destruktorech
Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení
VíceObjekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.
Objekty v PHP 5.x This is an object-oriented system. If we change anything, the users object. Objektové PHP Objekty se poprvé objevili v PHP ve verzi 4. Nepříliš zdařilý pokus. Programátoři získali nedůvěru
Více2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.
Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus
VíceIRAE 07/08 Přednáška č. 7. Začátek (head)
Fronta (Queue) FIFO First In First Out (první dovnitř první ven) Vložení položky (Enqueue) Vyjmutí položky (Dequeue) Přidávání prvků Konec (Tail) Začátek (head) na jedné straně (konec) Odebírání prvků
VíceDefinice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
VíceTeoretické minimum z PJV
Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov
VícePrincipy objektově orientovaného programování
Principy objektově orientovaného programování Třídy a objekty doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz C E T
VíceŠablony, kontejnery a iterátory
7. října 2010, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 21 Šablona funkce/metody Šablona je obecný popis (třídy, funkce) bez toho, že by
VíceMichal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
VíceŠablony, kontejnery a iterátory
11. března 2015, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 31 Obsah přednášky 1 Šablony 2 Abstraktní datové struktury 3 Iterátory 4 Array
VíceVÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu
VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632
VícePB161 Programování v jazyce C++ Přednáška 8
.. PB161 Programování v jazyce C++ Přednáška 8 Výjimky Správa prostředků (RAII) Nikola Beneš 9. listopadu 2015 PB161 přednáška 8: výjimky, RAII 9. listopadu 2015 1 / 24 . PB161 přednáška 8: výjimky, RAII
VícePlatforma.NET 4. hodina dnes to bude ideologické
Platforma.NET 4. hodina dnes to bude ideologické Aleš Keprt Ales.Keprt@upol.cz říjen 2006 Doporučená literatura 1. Duffy J. Professional.NET Framework 2.0. Wrox Press, 2006. 2. Wikipedia.NET Framework
VícePřipravil: Ing. Vít Ondroušek, Ph.D. Technologie.Net Framework
Připravil: Ing. Vít Ondroušek, Ph.D. Technologie.Net Framework úvod, historie, základy.net framework, programovací jazyky, vývojové prostředky Úvod strana 2 Cíl předmětu Seznámit se s vývojem aplikací
VíceVýčtový typ strana 67
Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce
VíceDatové typy v Javě. Tomáš Pitner, upravil Marek Šabo
Datové typy v Javě Tomáš Pitner, upravil Marek Šabo Úvod k datovým typům v Javě Existují dvě základní kategorie datových typů: primitivní a objektové Primitivní v proměnné je uložena přímo hodnota např.
VícePokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom
Poznámky k virtuálním metodám aneb co když zkoušíme překladač zlobit... Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom chtěli). Pokud neuvedeme
VíceMichal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
VíceNMIN201 Objektově orientované programování 2016/17 1 / :03:29
NMIN201 Objektově orientované programování 2016/17 1 / 42 21. 11. 2016 11:03:29 Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty
VíceMichal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
VíceJazyk C++ I. Šablony
Jazyk C++ I Šablony AR 2013/2014 Jazyk C++ I Úvod Zatím známe programovací styly: Strukturované programování, Objektově orientované programovaní. AR 2013/2014 Jazyk C++ I 2 Příklady void Print(const int&
VícePB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
VíceOBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů... 8-1 8.2 Standardně zavedené proudy... 8-1 8.
David MATOUŠEK OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PØÍKLADECH Praha 2011 David Matoušek Objektové programování v C++ v pøíkladech Lektoroval Ing. Bohumil Brtník, Ph.D. Bez pøedchozího písemného svolení nakladatelství
VíceUJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/
UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok
VícePB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
VíceIRAE 07/08 Přednáška č. 1
Úvod do předmětu OOP Objekt Proč OOP? Literatura, osnova předmětu viz. cvičení Základní prvek OOP sw inženýrství = model reálných objektů (věcí) člověk, auto, okno (ve windows), slovník, = model abstraktní
VícePB přednáška (23. listopadu 2015)
PB161 10. přednáška (23. listopadu 2015) Šablony Motivace snaha o co nejmenší duplikaci kódu co když máme kód, který chceme použít pro různé typy? generická funkce (maximum, minimum, swap, ) kontejnery
Vícepřetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního
VíceSeznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí
Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků
VíceTabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář
Vazba (binding) Tabulka symbolů Miroslav Beneš Dušan Kolář vazba = spojení mezi entitou a vlastností okamžik vazby (binding time) při návrhu jazyka při implementaci jazyka během překladu/spojování/zavádění
VíceObsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15
Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové
VíceAbstraktní datové typy: zásobník
Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní
Více14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.
Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání
VíceParametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics
1 Parametrizované třídy Generics generické třídy JDK zavádí mimo jiné tzv. parametrizované třídy - generics Úvod 2 podobnost se šablonami (templates) z C++ nejčastěji použité v oblasti knihoven kontejnerového
VíceADT/ADS = abstraktní datové typy / struktury
DT = datové typy obor hodnot, které může proměnná nabývat, s operacemi na tomto oboru určen: obor hodnot + výpočetní operace např. INT = { 2 147 483 648 až +2 147 483 647} + {+,,*,/,} ADT/ADS = abstraktní
VíceDědičnost (inheritance)
Dědičnost (inheritance) Úvod Umožňuje objektům převzít (zdědit) členy jiných objektů a pouze je rozšířit o Auto: lze odvodit Vztah je osobní auto, cisterna jsou auta Základní pojmy Bázová třída (rodič)
Vícepřetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - operátor je speciální
VíceDefinice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
Vícekonstruktory a destruktory (o)
konstruktory a destruktory (o) - slouží k ovlivnění vzniku (inicializace) a zániku (úklid) objektu - základní myšlenkou je, že proměnná by měla být inicializována (nastavena do počátečního stavu) a zároveň
VíceJazyk C++ II. STL knihovna kontejnery část 1
Jazyk C++ II STL knihovna kontejnery část 1 AR 2013/2014 Jazyk C++ II STL kontejnery Kontejnery jsou třídy, jejichž instance slouží k uskladňování dat. Každý druh kontejneru má své výhody a nevýhody. Kontejnery
VíceSpráva paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016
Správa paměti Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016 Objektové modelování, B36OMO 10/2016, Lekce 2 https://cw.fel.cvut.cz/wiki/courses/xxb36omo/start
Vícepublic static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());
Anotace a Hibernate Aleš Nosek, Ondřej Vadinský, Daniel Krátký Anotace v Javě Anotace jsou novinkou v Javy verze 5. Anotace umožňují doplnit kód Javy o dodatečné informace. Zapisují se přímo do zdrojového
VíceGenerické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18
Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: - systematizují typovou kontrolu kompilátorem, - vyjadřují jasněji smysl, zlepšují čitelnost a robustnost programu, - ulehčují
VícePROGRAMOVÁNÍ PRO MS WINDOWS 1
Cílem předmětu je seznámit posluchače s moderními prostředky pro tvorbu aplikací pro Windows jmenovitě s programovou platformou.net a programovacím jazykem C#. V průběhu budou vysvětlena následující témata:
VíceZpracoval: houzvjir@fel.cvut.cz
Zpracoval: houzvjir@fel.cvut.cz 10. Objektově orientované programování v C++. Přetěţování operátorů, generické funkce a třídy, výjimky, knihovny. (A7B36PJC) Obsah OOP v C++... 2 Pro připomenutí - Základní
VíceNPRG031 Programování II --- 2/2 Z, Zk
NPRG031 Programování II --- 2/2 Z, Zk paralelka Y St 14:00-15:30 v S3 Pavel Töpfer Kabinet software a výuky informatiky MFF UK MFF Malostranské nám., 4. patro, pracovna 404 pavel.topfer@mff.cuni.cz http://ksvi.mff.cuni.cz/~topfer
Více<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************
zdroje/zdroje.xml
Více7 Formátovaný výstup, třídy, objekty, pole, chyby v programech
7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,
VíceMichal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Více7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená
VícePočítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006
Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem
VíceAbstraktní datové typy
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní datové typy BI-PA2, 2011, Přednáška 10 1/27 Abstraktní datové typy Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky,
VíceProjekty pro výuku programování v jazyce Java
JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH Pedagogická fakulta Katedra informatiky Akademický rok: 2006/2007 TEZE BAKALÁŘSKÉ PRÁCE Projekty pro výuku programování v jazyce Java Jméno: František Přinosil
VíceProgramování v C++ 1, 6. cvičení
Programování v C++ 1, 6. cvičení dědičnost, polymorfismus 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
VíceArchitektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.
Architektura COM doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Historie Component Object Model (COM)
VíceIW5 - Programování v.net a C# 4 Pokročilé konstrukce C#
4 - Pokročilé konstrukce C# IW5 - Programování v.net a C# Strana 1 Obsah přednášky Výjimky Delegáti Události Lambda výrazy Strana 2 Výjimky a jejich zpracování Slouží k ošetření výjimečných (chybových)
Více