c# - innowacja czy plagiat?janusz/dydaktyka/2003... · wprowadzenie do platformy .net! język c#!...

44
C# - innowacja czy plagiat? Piotr Kowalski Seminarium magisterskie Zagadnienia programowania obiektowego Wydział Matematyki, Mechaniki i Informatyki Uniwersytet Warszawski

Upload: others

Post on 20-Aug-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

C# - innowacja czy plagiat?

Piotr Kowalski

Seminarium magisterskie �Zagadnienia programowania obiektowego�

Wydział Matematyki, Mechaniki i InformatykiUniwersytet Warszawski

Page 2: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Agenda

! Wprowadzenie do platformy .NET

! Język C#

! Wnioski

Page 3: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Platforma .NET

Web Services Web Forms Windows Forms

Data and XML classes

Framework Base Classes

Common Language Runtime

System operacyjny

Page 4: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Nie tylko Windows

! Project Mono i DotGNU � open source CLR dla systemów Unixowych

! Mono 1.0 spodziewane na przełomie 2003/2004

! Wsparcie od HP i Intela

! Plany Microsoftu � licencja �shared source�

Page 5: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

MSIL

! Microsoft Intermediate Language

! Wykonywany przez maszynę CLR

! Mechanizm analogiczny do JVM

! Kompilator Just-In-Time na żądanie

Page 6: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Języki .NET

! Czyli języki programowania, które �tłumaczą� się do MSIL! C#! C++ i zarządzany C++! Visual Basic! Java (także sam bajtkod)! Wsparcie dla innych języków powstaje w

ramach m.in. projektów open source

Page 7: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Okoliczności powstania C#

! Kierownictwo prac: Anders Hejlsberg i ScottWiltamuth

! Założenia! Efektywność C! Obiektowość C++! Bezpieczeństwo Javy! Łatwość programowania Visual Basic�a

! Pierwsza odsłona: lipiec 2000

Page 8: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Podstawowe byty C#

! Odpowiedniość z typami CTS! Klasy! Wyjątki! Interfejsy! Struktury! Typ wyliczeniowy

Page 9: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Typy C# a CTS

! Boolean! Byte! SByte *! Char! Decimal! Double! Single

! Int16! UInt16 *! Int32! UInt32 *! Int64! UInt64 *! Object! String

Page 10: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Wszystko jest obiektem

int n = 32;string Tekst = n.ToString();

string InnyTekst = 32.ToString();

Każdy typ danych dziedziczy automatycznie z System.Object.

Page 11: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Zarządzanie typami

! is � sprawdza, czy obiekt jest danego typubool ToJestPies = (piesek is Pies);

! typeof � zwraca typ obiektu (jako obiekt System.Type)

Type TypObiektu = typeof(piesek)! sizeof � zwraca rozmiar danego typu

(dostępne tylko w kodzie potencjalnie niebezpiecznym)

int rozmiar = sizeof(Pies)

Page 12: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Klasy w C#

! Nowy rodzaj klasy: sealed (zapieczętowana), dziedziczenie z takich klas jest zakazane; można także zakazywać przedefiniowywania poszczególnych metod przy dziedziczeniu

! Słowo kluczowe base analogiczne do this, odnoszące się do nadrzędnej klasy

! Klasy można zagnieżdżać

Page 13: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Składowe klas

! Pola (fields)! Stałe! Metody! Konstruktory! Destruktory! Właściwości (properties)! Operatory! Zdarzenia (events)! Indeksery (indexers)

Page 14: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Pola

! Nowy modyfikator: readonlypublic readonly int n = 3;wartość można ustawić w konstruktorze lub przy deklaracji (const: tylko przy deklaracji)

! Brak automatycznej synchronizacji pól zadeklarowanych jako static

Page 15: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Sprytne pola (SmartFields)

! Automatyczne upublicznianie prywatnych składowych ze sprawdzaniem poprawności

public int x {get {

return _x;}set {

TestValid(value);_x = value;

} }

Page 16: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Metody

! Niedozwolone parametry domyślne! Przekazywanie parametrów jako ref i out

(konieczne także przy wywołaniu)public static void GetVal(out int p) {

p = 5;}�

int q;GetVal(out q);

Page 17: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Metody c.d.

! Zmienna liczba parametrów metody:słowo kluczowe params

! Może być tylko jedno jako ostatnie na liście parametrów, związane z tablicą

public int Print(params int[] Lista) {foreach(int v in Lista) �

}

Page 18: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Konstruktory

! Konstruktory instancyjneStandardowo wywoływany domyślny konstruktor klasy nadrzędnej, inne wywołania trzeba wpisać explicite

! Konstruktory klasowe (statyczne)Deklarowane za pomocą słówka static

Page 19: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Konstruktory c.d.

! Kolejność wołania konstruktorów:

! Inicjalizacja pól statycznych klasy! Wywołanie statycznego konstruktora! Inicjalizacja pól obiektu! Wywołanie konstruktora dla obiektu

Page 20: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Dziedziczenie

! Słowa virtual i override � mechanizm wiązania dynamicznego z C++

override public void Info() {System.Console.WriteLine(��Tekst��)

}

Page 21: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Dziedziczenie c.d.

! Słowo new dla metod � wyłączenie metody z poszukiwań wiązania dynamicznego

new public int Value() {return 5;

}

! Różnice przy wołaniu z klasy bazowej i z docelowej

Page 22: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Widoczność

! public! protected � na poziomie klasy! internal � na poziomie pakietu (assembly)! protected internal! private

! Nie ma mechanizmu zaprzyjaźniania (friend)

Page 23: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Boxing i unboxing

! Opakowywanie i rozpakowywanie typów prostych z obiektów

int i = 123;object o = i; // boxingint j = (int)o; // unboxing (explicite)Console.WriteLine(�j: {0}�, j); // boxing

Page 24: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Przestrzenie nazw

! Deklarowane jak klasy

! Mechanizm zbliżony do pakietów Javy (m.in. identyczne zasady nazewnictwa)

! Słowo kluczowe using

! Współpraca przestrzeni nazw i pakietów .NET (assemblies), dołączanie powiązań

Page 25: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Interfejsy

! Klasy całkowicie abstrakcyjne, definiowane za pomocą słowa interface

! Definiuje tylko nagłówki metod

! Możliwe implementowanie wielu interfejsów przez jedną klasę (niemożliwe wielodziedziczenie)

Page 26: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Wyjątki

! Mechanizm try-catch-finally

! Wyjątki dziedziczą z klasy System.Exception

! Nie trzeba dopisywać słówka throws do nagłówków metod

! Dodatkowy atrybut InnerException

Page 27: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Rzutowanie

! Mechanizm oparty na C++

! Słówko as, które próbuje dokonać konwersji nie rzucając wyjątku w przypadku błędu (zamiast tego zwraca null)

Pies pies;Zwierze zwierze = �;pies = zwierze as Pies;

Page 28: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Rzutowanie c.d.

! Klasa System.Convert udostępnia szereg metod do konwersji między typami standardowymi

! Można przedefiniowywać rzutowania jak w C++ (jako operatory)

Page 29: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Struktury

! Struktury mogą dziedziczyć tylko z interfejsów

! Można zdefiniować konstruktor dla struktury

! Domyślna widoczność � private

! Mniej wymagające pamięciowo od klas (przechowywane na stosie); wada � trzeba ręcznie przekazywać referencje

Page 30: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Błędy arytmetyczne

! Słowa kluczowe checked i uncheckedpozwalają zaznaczyć, które fragmenty kodu powinny wykonywać się z włączona kontrolą błędów arytmetycznych, a które nie

! W przypadku braku tych klauzul efekt zależy od ustawień kompilatora

unchecked {a = b/c; // jeśli wiemy, ze c != 0

}! Mechanizm poprawia wydajność kodu

Page 31: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Pętla foreach

! Dokonuje iteracji po kolekcji elementów (np. tablicy)

foreach(int i in Tablica) {// i jest tylko do odczytuConsole.WriteLine(�{0}�, i);

}

Page 32: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Delegaci

! Zastępują wskaźniki do funkcji// najpierw trzeba zadeklarować typpublic delegate void Fun(int arg1, int arg2);�public void Work(Fun f) {

f(5,6);}

Page 33: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Delegaci c.d.

! Aby zdefiniować delegata piszemy metodę zgodną z jego definicją, np.public void Funkcja(int arg1, int arg2) {

Console.WriteLine(�{0},{1}�, arg1, arg2);}

! A następnie w kodzie tworzymy instancję:Fun f = new Fun(Funkcja);

! Możliwość łączenia delegatów w łańcuchy

Page 34: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Zdarzenia (events)

! Za pomocą mechanizmu delegatów można implementować mechanizm publish-subscribedzięki możliwości łączenia delegatów w łańcuchy

! W przypadku wystąpienia zdarzenia, klasa za nie odpowiadająca wywołuje łańcuch delegatów, z których każdy reprezentuje jednego subscribera

! Słowo kluczowe event

Page 35: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Atrybuty

! Meta-dane trzymane razem z kodem, np. klucze publiczne, adresy WWW, informacje o autorze, licencji

! Wykorzystując mechanizm reflection można uzyskać dostęp do przechowywanych informacji

! Bogaty zbiór gotowych atrybutów, możliwość definiowania własnych

! Rozbudowany mechanizm kontroli wartości atrybutów wbudowany w CLR i IDE

Page 36: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Atrybuty c.d.

[BugFix(123, �Jan Suzin�, �20/03/2002�, Comment=�Usunięty deadlock�)]

protected int GetValue(){�}

Page 37: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Indeksery (indexers)

! Rozszerzenie mechanizmu przeładowywania operatora []

public object this[int n] {get { return items[n]; }set { items[n] = value; }

}

Page 38: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Kod niebezpieczny (unsafe)

! C# daje możliwość pisania niskopoziomowego i niezarządzanego kodu

! Użycie klauzuli unsafe przy klasie, strukturze, interfejsie lub metodzie daje dostęp do operatorów sizeof, &, -> oraz *

! Słowo kluczowe fixed powoduje, że blok pamięci zarządzanej przestaje być poddawany odśmiecaniu i relokacji

Page 39: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Drobnostki

! case może porównywać typ string

! nie można przykrywać zmiennych

! eliminacja domyślnej konwersji int -> bool

Page 40: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Framework Class Library

! Zbiór �użytecznych� klas! Zawiera podstawowe struktury danych, klasy

do operacji wejścia/wyjścia (pliki, sieć), dostępu do danych (XML), wielowątkowości

! Wsparcie dla wyrażeń regularnych! Obecny mechanizm reflection! Windows Forms jako platforma tworzenia

interfejsu użytkownika

Page 41: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Wnioski

! Wiele �drobnych� innowacji do języka podyktowanych względami praktycznymi

! Pozostawienie programiście szerokiego wachlarza dostępnych środków

! Dodatkowe obostrzenia składni w celu wyeliminowania typowych błędów

Page 42: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Wnioski c.d.

! Język nastawiony na jak najefektywniejsze tworzenie kodu

! Rezygnacja z �czystości� języka na rzecz jego użyteczności

! Integralna część platformy .NET

Page 43: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Moja opinia

Ani rewolucja, ani plagiat. Język o szerokich zastosowaniach dobrze

wpasowujący się w obecne praktyczne potrzeby programistów.

Page 44: C# - innowacja czy plagiat?janusz/dydaktyka/2003... · Wprowadzenie do platformy .NET! Język C#! Wnioski. Platforma .NET Web Services Web Forms Windows Forms Data and XML classes

Koniec

Dziękuję!