Transcript Document
wykład 1
PSZ
Programowanie w Środowiskach Zintegrowanych
> Systemy i środowiska zintegrowane
> Środowisko zintegrowane Visual Studio .NET
Programowanie w środowiskach zintegrowanych
•
w wykładzie wykorzystano dostępne publicznie materiały firmy Microsoft, pochodzące z prezentacji
„.NET Framework & C#”
Programowanie w środowiskach zintegrowanych
Konspekt bieżącego wykładu
Kompilacja z linii poleceń a VS.NET
Model obiektowy wg. CLR
hermetyzacja, enkapsulacja, polimorfizm, dziedziczenie
Programowanie w środowiskach zintegrowanych
Visual Studio .NET
VB
C++
C#
JScript
J#
Common Language Specification
ASP.NET
Web Forms Web Services
Mobile Internet Toolkit
Windows
Forms
ADO.NET and XML
Base Class Library
Common Language Runtime
Operating System
Programowanie w środowiskach zintegrowanych
Visual Studio.NET
Czy VS.NET jest wymagane do tworzenia
oprogramowania?
•
Odpowiedź brzmi: nie !!!
–
Jesteśmy w stanie tworzyć programy korzystając z linii poleceń
–
Kompilator języka c# dostarczany jest wraz z platformą .NET, którą można
ściągnąć z Internetu albo przez Windows Update
–
Kolejne wersje platformy .NET znajdują się w katalogu
• C:\[Windows]\Microsoft.NET\Framework\v[xxxxxxxxx]
–
Należy pamiętać o dodaniu odpowiednich ścieżek do zmiennej path
–
Kompilator nosi nazwę csc i można go uruchamiać z linii poleceń
–
Disasembler nosi nazwę ildasm, i można go znaleźć w menu .NET SDK/tools
–
Spróbujmy uruchomić następujący przykład
Programowanie w środowiskach zintegrowanych
VS.NET przykład HelloWorld w C#
class MyClass
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello world");
}
}
Programowanie w środowiskach zintegrowanych
Rezultaty kompilacji
•
W wyniku kompilacji powstaje plik .exe lub .dll
•
Pliki te nie są prawdziwymi plikami .exe i .dll znanymi z systemu
windows lecz tzw. lokalny podzespół (ang. assembly).
Podzespoły te noszą nazwę logicznych.exe i .dll, i mogą zawierać
nie tylko programy, ale również wszelkie inne typy zasobów
(obrazy, pliki, html itp.)
•
Każdy podzespół zawiera tzw. manifest, określający jego nazwę,
numer wersji, spis składowych wewnętrznych i wykaz innych
podzespołów od jakich podzespół zależy
•
Informacje o manifeście można przejrzeć dokonująć
disasemblacji podzespołu. Disasembler dostępny jest z menu
tools pakietu .NET Framework
Programowanie w środowiskach zintegrowanych
Środowisko VS.NET
•
W takim razie po co nam VS.NET
–
Intelisense (podpowiedzi w czasie pisania)
–
Dynamiczna weryfikacja składni
–
Wygodne paski narzędziowe
–
Inspektor obiektów
–
Okno drzewa obiektów, przeglądarka klas
–
Edytor kodu i diagramów
–
Generator podpowiedzi i skrótów
–
Menedżer projektów
–
Zintegrowany lokalny i zdalny debugger
–
Ułatwienia w wykorzystaniu bibliotek komponentów
–
Komponenty dostępne na „rynku komponentów”
Programowanie w środowiskach zintegrowanych
W takim razie po co nam VS.NET
•
Spróbujmy ten sam przykład wygenerować przy pomocy VS.NET
Programowanie w środowiskach zintegrowanych
VS.NET typy projektów
Szablony
projektów
Języki
programowania
Aplikacje typu
SETUP
Bazy danych i
rozszerzenia IDE
Inne rozwiązania
wybór projektu i szablonu
determinuje jakie pliki zostaną
automatycznie dopięte do projektu
i jakimi komponentami będziemy
dysponować
Programowanie w środowiskach zintegrowanych
Elementy środowiska VS.NET
Projekt
Komponenty
Właściwości
Klasy
Pomoc
Serwery
Pasek Menu
Programowanie w środowiskach zintegrowanych
Zakładki z
plikami
źródłowymi
Komunikaty, błędy,
ostrzeżenia
VS.NET przykład HelloWorld w C#
W oknie projektu (Solution
Explorer) widzimy nazwy plików
składających się na pakiet,
informacje o metadanych, definicję
ikony oraz drzewo zależności które
potrzebne są do prawidłowego
działania modułu
W widoku klas (Class View)
widzimy informacje o przestrzeni
nazw, klasach, polach metodach i
klasach bazowych klas; ikony
oznaczają typ dostępu
Po kliknięciu prawym klawiszem
myszy i wybraniu „Properties”
widzimy cechy obiektu bądź – jak
w tym przypadku – klasy; można
je dynamicznie zmieniać
Programowanie w środowiskach zintegrowanych
VS.NET debugowanie i uruchamienie
Programowanie w środowiskach zintegrowanych
Model obiektowy wg. CLR
•
Obiekt:
–
definicje są bardzo różne: np.
• coś, czemu można nadać nazwę, np. samochód, tablica, przycisk na
formularzu
• reprezentacja rzeczy istniejącej w rzeczywistości
–
wg. CLR obiekt pewna całość, której można przypisać dwie cechy:
• dynamiczne - określające zachowanie
• statyczne – określające stan
–
wg. CLR obiekty można podzielić na trzy kategorie, w zależności od tego co jest
cechą dominującą:
• jeśli najważniejszy jest stan, obiekt nosi nazwę obiektu wartościowego
(value object); przykłady: data, łańcuch, napis, wartośc w walucie
• jeśli najważniejsze są usługi, a stan jest nieistotny obiekt ma charakter
usługowy (service object), przykłady: kontroler, weryfikator numeru karty,
manager komunikacji itp.
• jeśli obydwie cechy są ważne, tzn. ważna jest tożsamość obiektu, obiekt
nosi nazwę obiektu rzeczywistego (entity object); obiekty tej klasy często
zapisywane są w bazie danych, przykłady: konto bankowe, osoba itp
Programowanie w środowiskach zintegrowanych
Model obiektowy wg. CLR
•
Zróżnicowanie typów obiektów jest dobrze widoczne np.
operacjach kopiowania (klonowania) :
–
obiekty wartościowe mogą być kopiowane przez kopiowanie wszystkich pól
(shallow copy), ponieważ tożsamość nie ma tutaj znaczenia; jeśli obiekt
wchodzi w związki z innymi obiektami wystarczy skopiować referencje do tych
obiektów i będzie OK. (shallow copy)
–
obiekty usługowe raczej nie powinny być kopiowane
–
obiekty rzeczywiste posiadają tożsamość i powinny być kopiowane rozważnie,
poprzez rozważne utworzenie całej wewnętrznej infrastruktury obiektu, tj.
wszystkich pól będących obiektami wartościowymi (tu proste kopiowanie), i
ewentualne odtworzenie obiektów z którymi dany obiekt wchodzi w związki;
(deep copy)
Programowanie w środowiskach zintegrowanych
Model obiektowy wg. CLR
•
Klasa składa się z:
–
metod – realizujących aktywność klasy; metoda ma nazwę, może mieć
argumenty i typ wyniku
–
pól – przechowujących informacje o stanie obiektu, które mogą być
referencjami do innych obiektów lub zmiennymi typów bezpośrednich
–
właściwości – które są specyficznymi polami, do których zaimplementowano
metody akcesyjne (akcesory)
–
zdarzeń – subskrypcja zdarzeń, na które obiekt ma reagować, zgodnie ze
wzorcem observer
Programowanie w środowiskach zintegrowanych
Model obiektowy wg. CLR
•
Typy pól (argumentów)
•
typy bezpośrednie (value types)
–
pochodne od System.ValueType, przekazywane przez wartość, przechowywane
na stosie, dobrze znane int, string, float itp.
–
podlegają w razie potrzeby podlegają opakowywaniu / rozpakowaniu
• int n=3;
• object k = test(n); gdzie test jest typu void test(object o) // opakowanie
• int z = (int) k; // rozpakowanie
•
typy referencyjne (reference type)
–
obiekty zdefiniowanych klas, przekazywane wyłącznie przez referencję,
przechowywane na stercie, domyślnie dziedziczą z klasy object
Programowanie w środowiskach zintegrowanych
Model obiektowy wg. CLR
•
Enkapsulacja
–
ograniczenie dostępu do pewnych fragmentów klasy
–
modyfikatory private, protected, public, internal
class Figura {
protected int x, y, bok;
protected Pen skyBluePen = new Pen(Brushes.DeepSkyBlue);
public void Rysuj(Graphics g){}
public void Przesun(int Adx, int Ady) {
x+=Adx;
y+=Ady;
}
}
Programowanie w środowiskach zintegrowanych
Model obiektowy wg. CLR
•
Dziedziczenie
–
wyłącznie jednobazowe
–
dziedziczenie wielobazowe (z C++) realizowane przy pomocy interfejsów
class Kwadrat : Figura {
public Kwadrat(int Ax, int Ay, int Abok) {
x = Ax;
y = Ay;
bok = Abok;
}
new public void Rysuj(Graphics g) {
g.DrawRectangle(skyBluePen, x, y, bok, bok);
}
}
Programowanie w środowiskach zintegrowanych
Model obiektowy wg. CLR
•
Polimorfizm
–
w programowaniu obiektowym to wykazywanie przez metodę różnych form
działania w zależności od tego jaki typ obiektu jest wskazywany przez wskaźnik
lub referencję (pomijając typ wskaźnika lub referencji
–
w programowaniu funkcyjnym to możliwość stosowania tej samej funkcji dla
różnych typów parametrów. Najprostsza funkcja polimorficzna
abstract class Figura {
…
public virtual
void Rysuj(Graphics g){}
…
}
class Kwadrat : Figura {
…
override public void Rysuj(Graphics g) {
g.DrawRectangle(skyBluePen, x, y, bok, bok);
}
…
}
Programowanie w środowiskach zintegrowanych
Model obiektowy wg. CLR
•
Interfejs reprezentuje zachowanie, najczęściej wspólne dla wielu
obiektów, któremu można nadać nazwę, np. „drukowalny”,
„zapisywalny do strumienia”, „transportowy”
•
Interfejsy zapewniają możliwość zaimplementowania pewnych
zachowań, które niejako stoją obok głównej, „organicznej”,
ścieżki dziedziczenia
–
Przykład: „TIR” jest pojazdem, „Samochód” też jest pojazdem, posiadają
wspólne cechy (dziedziczenie). „TIR” jednakże posiada zdolność do
przewożenia ładunków, których „Samochód” przewieźć nie może. Aby pokreślić
zdolność do przewożenia ładunków, możemy zaimplementować w klasie TIR
interfejs ITransport, który dodaje obiektom klasy zdolność przewożenia
ładunku. Interfejs ITransport powinien także zostać zaimplementowany w
klasach „Pociąg”, „Samolot” itp. W przyszłości, jeśli pojawi się transportowy
wodolot, również powinien otrzymać interfejs „ITransport”
–
Przykład: większość klas z kolekcjami ma zaimplementowany interfejs ILIST,
które dają tę możliwość, iż obiekty tego typu można po prostu traktować jako
listy
Programowanie w środowiskach zintegrowanych
Model obiektowy wg. CLR
• Interfejsy – przykład
interface IDrawable {
void Rysuj(Graphics g);
}
abstract class Figura: IDrawable {
protected int x, y, bok;
protected Pen skyBluePen = new Pen(Brushes.DeepSkyBlue);
public virtual void Rysuj(Graphics g){}
public void Przesun(int Adx, int Ady) {
x+=Adx;
y+=Ady;
}
}
•
sprawdzenie implementacji interfejsu:
if (kwadrat is IDrawable)
Programowanie w środowiskach zintegrowanych
Model obiektowy wg. CLR
•
Przeciążanie – wiele metod o tych samych nazwach, lecz różnych
typach argumentów
•
Przesłanianie:
–
modyfikatory dla metod
• Overridable (virtual) - może, lecz nie musi być przesłonięta w klasie
pochodnej
• MustOverride (new) – wymaga przesłonięcia w klasie pochodnej
• NotOverridable (override) – nie może być przesłaniania w klasach
pochodnych
Programowanie w środowiskach zintegrowanych
Model obiektowy wg. CLR
•
Właściwość to pole prywatne, do którego zaimplementowano
akcesory
–
niech k będzie obiektem klasy „Słupek”. Zamiast wywoływać g=k.GetBar() lub
k.SetBar(15) możemy po prostu wywołać odpowiednio g=k.Bar i k.Bar = 15;
–
właściwości dają tę zaletę nad publicznymi polami, że ich modyfikacja zawsze
wymaga przejścia przez metody get / set, co ułatwia nam kontrolę nad
przypisywaniem wartości polom
przykład: c++
class Słupek {
int bar;
public int GetBar() {
return bar;
}
public void SetBar(int newbar) {
// check newbar for validity
bar = newbar;
}
}
przykład: c#
class Słupek {
int bar;
public int Bar {
get { return bar; }
set {
// check the new value
bar = value;
}
}
}
Programowanie w środowiskach zintegrowanych
Model obiektowy wg. CLR
•
Model zdarzeniowy/callback
Elementy
interfejsu
… informują obiekt klasy
EdytorForm o wystąpieniu
zdarzenia
–
this.button1.Click += new System.EventHandler(this.button1_Click);
–
obsługa przez tzw. delegację
Programowanie w środowiskach zintegrowanych
Model obiektowy wg. CLR
• Delegacja – odpowiada niejako liście wskaźników do
statycznych funkcji
delegate void D(int x); // odpowiada typedef
class C {
public static void M1(int i) {...}
public static void M2(int i) {...}
}
class Test {
static void Main() {
D cd1 = new D(C.M1); // M1
D cd2 = new D(C.M2); // M2
D cd3 = cd1 + cd2; // M1 + M2
D cd4 = cd3 + cd1; // M1 + M2 + M1
D cd5 = cd4 + cd3; // M1 + M2 + M1 + M1 + M2
}
}
Programowanie w środowiskach zintegrowanych
Model obiektowy wg. CLR
public delegate void ButtonEventHandler();
class TestButton {
// OnClick is an event, implemented by a delegate ButtonEventHandler.
public event ButtonEventHandler OnClick;
// A method that triggers the event:
public void Click() {
OnClick();
}
}
//Create an instance of the TestButton class.
TestButton mb = new TestButton();
// Specify the method that will be triggered by the OnClick event.
mb.OnClick += new ButtonEventHandler(TestHandler);
// Specify an additional anonymous method.
mb.OnClick += delegate { System.Console.WriteLine("Hello, World!"); };
// Trigger the event
mb.Click();
Programowanie w środowiskach zintegrowanych
Na wykładzie
Wprowadzenie do programowania obiektowego w C#
Założenie i motywacja
Składowe klas
Dziedziczenie, interfejsy
Środowisko Visual Studio IDE
Proste projekty w linii poleceń
Wykorzystanie VS.NET
Na następnym wykładzie: Biblioteka system (kolekcje)
Programowanie w środowiskach zintegrowanych