Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Advanced .NET Programming I 1st Lecture

Podobné prezentace


Prezentace na téma: "Advanced .NET Programming I 1st Lecture"— Transkript prezentace:

1 Advanced .NET Programming I 1st Lecture
Pavel Ježek Some of the slides are based on University of Linz .NET presentations. © University of Linz, Institute for System Software, 2004 published under the Microsoft Curriculum License (

2 Struktura předmětu NPRG035 (2/2 Zk/Z) – Jazyk C# a platforma .NET (zima) Přednáška Cvičení (SW2) – třeba se přihlásit v SISu NPRG038 (2/2 Zk/Z) – Pokročilé programování pro .NET I (léto) Přednáška – úterý 10:40 v S3 Cvičení (SW2) NPRG057 (2/0 Zk) – Pokročilé programování pro .NET II (léto) Přednáška – pondělí 10:40 v S3 – „interface s okolím“ NPRG064 (0/2 Z) – Programovaní uživatelských rozhraní v .NET (léto) Přednáška – úterý 15:40 v S3 – „interface s uživatelem“ Začíná 4. týden semestru (1.-3. týden jsou v tomto slotu přednášky o Ročníkovém projektu a o Bakalářských pracech)

3 Požadavky na zápočet/zkoušku
NPRG035 (2/2 Zk/Z) – Jazyk C# a platforma .NET (zima) Zkouška (ala Principy) Splněné povinnosti ze cvičení Zápočtový program (kontrolují cvičící) Praktický zápočtový test v počítačové laboratoři Naprogramovat a odladit jeden jednoduchý příklad Časový limit: 3 hodiny Celkem 5 pokusů, z toho ale maximálně 3 pokusy v zimním zk. obd. (další až v některém z letních termínů) Dostatek termínů v zimním zkouškovém období + přibližně 2 v letním NPRG038 (2/2 Zk/Z) – Pokročilé programování pro .NET I (léto) Splněné povinnosti ze cvičení (1/2 [= 3+2{vlákna}] domácích úkolů na 100%) Zápočtový program NPRG057 (2/0 Zk) – Pokročilé programování pro .NET II (léto) “Zkouškový program” (kontrolují cvičící z NPRG038, případně i NPRG035) nebo Zápočet Zápočet Zkouška

4 Požadavky na zápočet/zkoušku
NPRG035 (2/2 Zk/Z) – Jazyk C# a platforma .NET (zima) Zkouška (jako na Principech počítačů + povinné ústní dozkoušení) Splněné povinnosti ze cvičení Zápočtový program (kontrolují cvičící) Praktický zápočtový test v počítačové laboratoři Naprogramovat a odladit jeden jednoduchý příklad Časový limit: 3 hodiny Celkem 5 pokusů, z toho ale maximálně 3 pokusy v zimním zk. obd. (další až v některém z letních termínů) Dostatek termínů v zimním zkouškovém období + přibližně 2 v letním NPRG038 (2/2 Zk/Z) – Pokročilé programování pro .NET I (léto) Zápočtový program Zkouška (jako na PP + povinné ústní dozkoušení) NPRG057 (2/0 Zk) – Pokročilé programování pro .NET II (léto) “Zápočtový program” (kontrolují cvičící z NPRG038, případně i NPRG035) NEBO NPRG064 (0/2 Z) – Programování uživatelských rozhraní v .NET (léto) Zápočtový program (kontrolují cvičící z NPRG038, případně i NPRG 035) Zápočet Zápočet Zkouška Zápočet

5 Požadavky na zápočet/zkoušku
NPRG035 (2/2 Zk/Z) – Jazyk C# a platforma .NET (zima) Zkouška (jako na Principech počítačů + povinné ústní dozkoušení) Splněné povinnosti ze cvičení Zápočtový program (kontrolují cvičící) Praktický zápočtový test v počítačové laboratoři Naprogramovat a odladit jeden jednoduchý příklad Časový limit: 3 hodiny Celkem 5 pokusů, z toho ale maximálně 3 pokusy v zimním zk. obd. (další až v některém z letních termínů) Dostatek termínů v zimním zkouškovém období + přibližně 2 v letním NPRG038 (2/2 Zk/Z) – Pokročilé programování pro .NET I (léto) Zápočtový program Zkouška (jako na PP + povinné ústní dozkoušení) NPRG057 (2/0 Zk) – Pokročilé programování pro .NET II (léto) “Zápočtový program” (kontrolují cvičící z NPRG038, případně i NPRG035) NEBO NPRG064 (0/2 Z) – Programování uživatelských rozhraní v .NET (léto) Zápočtový program (kontrolují cvičící z NPRG038, případně i NPRG 035) Zápočet NPRG064 (0/2 Z) – Programování uživatelských rozhraní v .NET (léto) Zápočtový program, který byl uznaný v NPRG035 a/nebo v NPRG038 a/nebo v NPRG057, pokud má nějaké netriviální uživatelské rozhraní (Desktop App = WinForms/WPF, Mobile App = Xamarin, Web App = ASP.NET WebForms/ASP.NET MVC Zápočet Zkouška Zápočet

6 Nevygenerovaný (ručně psaný) rozumný kód
Zápočtový program Termíny NPRG035 (zima), i NPRG038 (léto), NPRG057 (léto), NPRG064 (léto): Specifikace: Předvedení finální plně funkční verze (včetně uživatelské a programátorské dokumentace): 1. deadline: 2. deadline: Požadavky na program z NPRG035, NPRG064: Předvedeno do 1. deadline: minimálně 30 kB zdrojového kódu v jazyce C# Předvedeno do 2. deadline: minimálně 45 kB zdrojového kódu v jazyce C# Předvedeno po 2. deadline: minimálně 60 kB zdrojového kódu v jazyce C# Požadavky na program z NPRG038, resp. z NPRG057: Předvedeno do 1. deadline: minimálně 60 kB zdrojového kódu v jazyce C# Předvedeno do 2. deadline: minimálně 90 kB zdrojového kódu v jazyce C# Předvedeno po 2. deadline: minimálně 120 kB zdrojového kódu v jazyce C# Netriviální a rozumné použití některé z „technologií“ probíraných v NPRG038 (vlákna, Sockets [síťování], .NET Remoting, LINQ, Reflection, generování kódu), resp. NPRG057 (unsafe kód, C++/CLI, .NET Security, ADO.NET, Web Services, serializace, skriptování) – ne XML! Poznámka: Každý zápočtový program, který splňuje požadavky NPRG038, resp. NPRG057, splňuje i požadavky NPRG035 (tj. lze odevzdat jeden program za oba předměty) rozumný/rozumné = na požádání posoudí cvičící POZOR! Osobní předvedení je součástí odevzdání. Na předvádění si připravte několik slidů shrnujících: hlavní funkce programu + hlavní řešené problémy + nástin architektury. Nevygenerovaný (ručně psaný) rozumný kód

7 Test: Extension Methods and Structs

8 Test: Static Constructors

9 Goto

10 Class System.Object Topmost base class of all other classes
class Object { protected object MemberwiseClone() {...} public Type GetType() {...} public virtual bool Equals (object o) {...} public virtual string ToString() {...} public virtual int GetHashCode() {...} public static bool ReferenceEquals(object objA, object objB); }

11 Sorting: IComparable and IComparer
IComparable is interface for types with order classes implementing IComparable are values types like Int32, Double, DateTime, … class Enum as base class of all enumeration types class String IComparer is interface for the realization of compare operators public interface IComparable { int CompareTo(object obj); // <0 if this < obj, 0 if this == obj, >0 if this > obj } public interface IComparable<in T> { int CompareTo(T obj); // <0 if this < obj, 0 if this == obj, >0 if this > obj public interface IComparer { int Compare(object x, object y); // <0 if x < y, 0 if x == y, >0 if x > y } public interface IComparer<in T> { int Compare(T x, T y); // <0 if x < y, 0 if x == y, >0 if x > y

12 IEnumerable and IEnumerator (1)
Anything which is enumerable is represented by interface IEnumerable IEnumerator realizes an iterator Also generic versions IEnumerable<out T> and IEnumerator<out T> Enumerator should throw an InvalidOperationException on concurrent modification! interface IEnumerable { IEnumerator GetEnumerator(); } interface IEnumerator { object Current {get;} bool MoveNext(); void Reset(); }

13 IEnumerable and IEnumerator
following statement: foreach (ElementType element in collection) statement; is translated into: IEnumerator enumerator = ((IEnumerable) collection).GetEnumerator(); try { ElementType element; while (enumerator.MoveNext()) { element = (ElementType) enumerator.Current; statement; } } finally { IDisposable disposable = enumerator as IDisposable; if (disposable != null) disposable.Dispose();

14 IEnumerable and IEnumerator (optimized)
following statement: foreach (ElementType element in collection) statement; is translated into: var enumerator = collection.GetEnumerator(); try { ElementType element; while (enumerator.MoveNext()) { element = (ElementType) enumerator.Current; statement; } } finally { IDisposable disposable = enumerator as IDisposable; if (disposable != null) disposable.Dispose();

15 Iterators so far foreach loop can be applied to objects of classes which implement IEnumerable class MyClass: IEnumerable<T> { ... public IEnumerator<T> GetEnumerator() { return new MyEnumerator(...); } private class MyEnumerator: IEnumerator<string> { public string Current { get {...} } public bool MoveNext() {...} public void Reset() {...} interface IEnumerable<T> { IEnumerator<T> GetEnumerator(); } MyClass x = new MyClass(); ... foreach (string s in x) ... complicated to implement!!

16 Iterator Methods Characteristics of an interator method
class MyClass { string first = "first"; string second = "second"; string third = "third"; ... public IEnumerator<string> GetEnumerator() { yield return first; yield return second; yield return third; } Characteristics of an interator method has the signature public IEnumerator<T> GetEnumerator statement body contains at least one yield statement MyClass x = new MyClass(); ... foreach (string s in x) Console.Write(s + " "); // prints "first second third " returns a sequence of values foreach loop traverses this sequence How does an iterator method work? Note MyClass need not implement IEnumerable!

17 What Happens Behind the Scene?
returns an object of the following class public IEnumerator<int> GetEnumerator() { try { ... } finally { } class _Enumerator1 : IEnumerator<int> { int Current { get {...} } bool MoveNext() {...} void Dispose() {...} } is translated into foreach (int x in list) Console.WriteLine(x); IEnumerator<int> _e = list.GetEnumerator(); try { while (_e.MoveNext()) Console.WriteLine(_e.Current); } finally { if (_e != null) _e.Dispose(); } MoveNext runs to the next yield statement Dispose executes a possibly existing finally block in the iterator method


Stáhnout ppt "Advanced .NET Programming I 1st Lecture"

Podobné prezentace


Reklamy Google