C# - innowacja czy plagiat?

Podobne dokumenty
Programowanie w środowiskach graficznych. Wykład 3 Język C#

Wykład 5 Okna MDI i SDI, dziedziczenie

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Materiały do zajęć VII

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Metodyka programowania. Podstawy C#

Programowanie obiektowe

Programowanie Komputerów

Podstawy programowania. Wprowadzenie

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki

Programowanie obiektowe

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Multimedia JAVA. Historia

Wykład 8: klasy cz. 4

Microsoft IT Academy kurs programowania

Klasy cd. Struktury Interfejsy Wyjątki

Klasy abstrakcyjne, interfejsy i polimorfizm

TEMAT : KLASY DZIEDZICZENIE

MATERIAŁY DO ZAJĘĆ II

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Programowanie obiektowe w języku

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Kurs WWW. Paweł Rajba.

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie obiektowe

Dziedziczenie. dr Jarosław Skaruz

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Programowanie obiektowe i zdarzeniowe

Podstawy programowania. Programowanie obiektowe

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Java Język programowania

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Języki i paradygmaty programowania doc. dr inż. Tadeusz Jeleniewski

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

KOTLIN. Język programowania dla Androida

Programowanie obiektowe

Programowanie obiektowe

.NET Klasy, obiekty. ciąg dalszy

Programowanie obiektowe

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie obiektowe

Wykład 3 Składnia języka C# (cz. 2)

Programowanie w Internecie. Java

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie obiektowe

Języki i metody programowania Java. Wykład 2 (część 2)

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Wstęp do programowania obiektowego. Wykład 2

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Programowanie obiektowe. Obiekt Klasa Składnia klasy: Interfejsy Składnia interfejsu: Metody Składnia instrukcji Sub: Składnia instrukcji function:

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Programowanie Obiektowe i C++

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie C# mgr in. Dariusz Ku. p. 119A

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Zaawansowane programowanie w języku C++ Klasy w C++

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Programowanie 2. Język C++. Wykład 3.

Metodyka programowania. Podstawy C#

Definiowanie własnych klas

Język C++ Różnice między C a C++

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Programowanie obiektowe

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Wykład 4: Klasy i Metody

Definicje klas i obiektów. Tomasz Borzyszkowski

Programowanie obiektowe

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie obiektowe

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Podstawy programowania III

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Aplikacje w środowisku Java

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Dokumentacja do API Javy.

Dziedziczenie jednobazowe, poliformizm

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie Obiektowe Ćwiczenie 4

Dziedziczenie. Tomasz Borzyszkowski

Programowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie aplikacji okienkowych Windows

Języki i metody programowania Java INF302W Wykład 3 (część 1)

1 Atrybuty i metody klasowe

Transkrypt:

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

Agenda! Wprowadzenie do platformy.net! Język C#! Wnioski

Platforma.NET Web Services Web Forms Windows Forms Data and XML classes Framework Base Classes Common Language Runtime System operacyjny

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

MSIL! Microsoft Intermediate Language! Wykonywany przez maszynę CLR! Mechanizm analogiczny do JVM! Kompilator Just-In-Time na żądanie

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

Okoliczności powstania C#! Kierownictwo prac: Anders Hejlsberg i Scott Wiltamuth! Założenia! Efektywność C! Obiektowość C++! Bezpieczeństwo Javy! Łatwość programowania Visual Basic a! Pierwsza odsłona: lipiec 2000

Podstawowe byty C#! Odpowiedniość z typami CTS! Klasy! Wyjątki! Interfejsy! Struktury! Typ wyliczeniowy

Typy C# a CTS! Boolean! Byte! SByte *! Char! Decimal! Double! Single! Int16! UInt16 *! Int32! UInt32 *! Int64! UInt64 *! Object! String

Wszystko jest obiektem int n = 32; string Tekst = n.tostring(); string InnyTekst = 32.ToString(); Każdy typ danych dziedziczy automatycznie z System.Object.

Zarządzanie typami! is sprawdza, czy obiekt jest danego typu bool 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)

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ć

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

Pola! Nowy modyfikator: readonly public 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

Sprytne pola (SmartFields)! Automatyczne upublicznianie prywatnych składowych ze sprawdzaniem poprawności public int x { get { return _x; } set { TestValid(value); _x = value; } }

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);

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)

Konstruktory! Konstruktory instancyjne Standardowo wywoływany domyślny konstruktor klasy nadrzędnej, inne wywołania trzeba wpisać explicite! Konstruktory klasowe (statyczne) Deklarowane za pomocą słówka static

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

Dziedziczenie! Słowa virtual i override mechanizm wiązania dynamicznego z C++ override public void Info() { } System.Console.WriteLine( Tekst )

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

Widoczność! public! protected na poziomie klasy! internal na poziomie pakietu (assembly)! protected internal! private! Nie ma mechanizmu zaprzyjaźniania (friend)

Boxing i unboxing! Opakowywanie i rozpakowywanie typów prostych z obiektów int i = 123; object o = i; // boxing int j = (int)o; // unboxing (explicite) Console.WriteLine( j: {0}, j); // boxing

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ń

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)

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

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;

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)

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

Błędy arytmetyczne! Słowa kluczowe checked i unchecked pozwalają 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

Pętla foreach! Dokonuje iteracji po kolekcji elementów (np. tablicy) foreach(int i in Tablica) { // i jest tylko do odczytu Console.WriteLine( {0}, i); }

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

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

Zdarzenia (events)! Za pomocą mechanizmu delegatów można implementować mechanizm publish-subscribe dzię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

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

Atrybuty c.d. [BugFix(123, Jan Suzin, 20/03/2002, Comment= Usunięty deadlock )] protected int GetValue() { }

Indeksery (indexers)! Rozszerzenie mechanizmu przeładowywania operatora [] public object this[int n] { get { return items[n]; } set { items[n] = value; } }

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

Drobnostki! case może porównywać typ string! nie można przykrywać zmiennych! eliminacja domyślnej konwersji int -> bool

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

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

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

Moja opinia Ani rewolucja, ani plagiat. Język o szerokich zastosowaniach dobrze wpasowujący się w obecne praktyczne potrzeby programistów.

Koniec Dziękuję!