Ściąga1

1. Klasa, dane (pola i właściwości) i metody, konstruktor, obiekt.

Klasa jest częściową lub całkowitą definicją dla obiektów. Definiuje jakie metody i zmienne będą występować w obiekcie. Obiekt, który został stworzony na podstawie danej klasy nazywany jest jej instancją. Klasy mogą być typami języka programowania - przykładowo, instancja klas Grzyb będzie mieć typ Grzyb.

Klasa jest to konstrukcja grupująca elementy: funkcje i zmienne, jest to wzorzec do tworzenia obiektów.Funkcje nazywane są metodami, natomiast zmienne właściwościami.Klasę definiuje się w następujący sposób:

class A{

//ciało klasy, tutaj powinny być zdefiniowane atrybuty oraz metody

}

Składowymi klasy są dane (pola, właściwości) i metody.

-Pole jest zmienną dowolnego typu, która jest zadeklarowana bezpośrednio w klasie przykład: int a

-Właściwości, które też są zadeklarowane w klasie, posiadają procedury pobierania i ustawiania, które zapewniają większą kontrolę nad sposobem ustawiania lub zwracania wartości.(get i set) przykład : int a {get; set;}

Metoda to funkcja należąca do klasy. Metody składowe są nawet czasem nazywane funkcjami

składowymi. Metody definiują, co klasa może zrobić i jak się zachowuje.

Konstruktor - wywoływany przy tworzeniu obiektu, często przypisywane są w nim definiowane domyślne wartości zmiennych tworzonego obiektu

konstruktor domyślny - to konstruktor, który może być wywoływany podczas tworzenia obiektu bez żadnych argumentów.

* musi nazywać się tak jak klasa

* nie zwraca żadnego typu

* publiczny

* może mieć argumenty

przykład:

public Nazwaklasy() { }

Class Imie{

public int imie;

public Imie(int i){

imie = i;

}

Class Program

static void main(){

Imie moje = new Imie(Kacper)

}

}

2. Hermetyzacja - modyfikatory; domyślne modyfikatory w C# i ich interpretacja.

Hermetyzacja polega na ukrywaniu pewnych danych składowych lub metod obiektów danej klasy tak, aby były one dostępne tylko metodom wewnętrznym danej klasy lub funkcjom zaprzyjaźnionym.

Modyfikatory służą do modyfikowania deklaracji typów oraz jego elementów członkowskich.

Modyfikatory dostępu: określają poziom dostępu do zmiennych i metod wchodzących w skład klas czy struktur

a) public - Nie ma żadnych ograniczeń na uzyskiwanie dostępu,

b) private – dostęp tylko w obrębie klasy w której została zadeklarowana jej składowa (jest domyślnym modyfikatorem dostępu dla składowych klasy)

c) internal – dostęp tylko w obrębie tego samego zestawu( np. biblioteki)

d) protected - elementy będą dostępne dla danej klasy oraz na potrzeby klas dziedziczonych

Inne modyfikatory:

abstract - Wskazuje, że klasa jest przeznaczona do użycia wyłącznie jako klasa podstawowa innych klas.

async - Wskazuje, że modyfikowana metoda, wyrażenie lambda lub metoda anonimowa jest asynchroniczna.

const -(wartość stała) Określa, że nie można modyfikować wartości pola lub zmiennej lokalnej.

event - Deklaruje zdarzenie.

extern -Wskazuje, że metoda jest implementowana zewnętrznie.

new - Jawnie ukrywa element członkowski odziedziczony z klasy podstawowej.

override -Dostarcza nową implementację wirtualnego elementu członkowskiego odziedziczonego z klasy podstawowej.

partial - Definiuje częściowe klasy, struktury i metody w obrębie jednego zestawu.

eadonly - Deklaruje pole, do którego można przypisać wartości tylko w ramach deklaracji lub za pomocą konstruktora w tej samej klasie.

sealed - Określa, że klasa nie może być dziedziczona.

static - Deklaruje element członkowski, który należy do typu, a nie do określonego obiektu.

unsafe - Deklaruje niebezpieczny kontekst.

virtual - Deklaruje metodę lub metodę dostępu, której implementację można zmienić za pomocą zastępującego elementu członkowskiego w klasie pochodnej.

volatile - Wskazuje, że pole może być modyfikowane w programie przez element, taki jak system operacyjny, sprzęt lub wykonywany równocześnie wątek.

3. Hermetyzacja - właściwości i ich akcesory (get,set) w C#.

Właściwość nie jest ani metodą ani zmienną, zapewnia dostęp do pól klasy posługując się przy tym akcesorami get i set. Główną funkcjonalnością właściwości jest możliwość zapisywania i odczytywania prywatnych pól klasy, tak jak by były publiczne.

Akcesor get wywoływany jest w chwili gdy chcemy pobrać wartość właściwości.
Akcesor set wywołany jest w chwili nadania wartości właściwości. Get zwraca wartość a set ją ustawia.

Używanie właściwości i akcesorów pozwala znacznie zredukować kod a na dodatek narzuca schemat poprawnego programowania obiektowego.

class Imie{

private int imie;

public int IMIE{

get {return imie;}

set {imie = value;}

}

}

class Program{

static void main(){

Imie moje = new Imie();

moje.IMIE = Kacper;

Console.ReadLine("{0}", moje.IMIE);

}

}

4. Dziedziczenie; metody i konstruktory klasy bazowej; możliwości i ograniczenia dziedziczenia w C#.

Dziedziczeniem w programowaniu obiektowym nazywamy mechanizm współdzielenia funkcjonalności między klasami. Klasa może dziedziczyć po innej klasie, co oznacza, że oprócz swoich własnych atrybutów oraz zachowań, uzyskuje także te pochodzące z klasy, z której dziedziczy. Klasa dziedzicząca jest nazywana klasą pochodną lub potomną zaś klasa, z której następuje dziedziczenie — klasą bazową Z jednej klasy bazowej można uzyskać dowolną liczbę klas pochodnych. Klasy pochodne posiadają obok swoich własnych metod i pól, również kompletny interfejs klasy bazowej.

-Klasy pochodne otrzymują wszystkie metody i atrybuty swoich klas bazowych oraz mogą dodawać nowe

-Konstruktory, w przeciwieństwie do innych metod, nie podlegają dziedziczeniu.

Dziedziczenie posiada kilka ograniczeń wynikających z faktu, że hierarchia klas jest ustalana w momencie kompilacji programu i nie może podlegać późniejszym zmianom. Wyobraźmy sobie klasę Osoba, z której dziedziczą klasy Pracownik oraz Student. Napotykamy tutaj na istotne problemy:Pojedynczość — w językach z pojedynczym dziedziczeniem osoba może być albo pracownikiem, albo studentem.Niezmienność — nawet jeśli skorzystamy z wielokrotnego dziedziczenia i utworzymy klasę StudentPracownik, klasę wybieramy w momencie tworzenia obiektu i nie możemy jej później zmienić. Oznacza to, że system nie może poprawnie reagować na sytuacje, gdy dotychczasowy student zostaje dodatkowo pracownikiem, gdyż konieczne jest wtedy utworzenie całkowicie nowego obiektu.

class Zwierze

{

... };

class Gad : public Zwierze

{

...

};

class Ssak : public Zwierze

{

...

};

5. Asocjacje (posiadanie przez obiekt [referencji do] obiektu innej klasy): agregacja, kompozycja.

Asocjacje są to związki między klasami. Mamy dwa następujące typy asocjacji kompozycja i agregacja. Obiekt klasy A ma referencje do obiektu klasy B.
Kompozycja wtedy gdy A kontroluje tworzenie i niszczenie B , A wywołuje konstruktor klasy B

Agregacja, gdy A nie kontroluje „czasu istnienia B” np. B żyje dłużej

Obiekt przestaje „ żyć” kiedy przestaje istnieć referencja do obiektu.

6. Klasy i metody abstrakcyjne.

Klasa abstrakcyjna to taka klasa która nie dostarcza nam dokładnych implementacji metod. Celem tych klas jest tylko przekazanie pewnych cech i funkcji do swoich kolegów i tyle. W takim wypadku do gry wchodzi słowo kluczowe “abstract". Dzięki niemu możesz stworzyć klasę abstrakcyjną. Nie możesz stworzyć instancji klasy abstrakcyjnej czyli oznaczasz, że ta klasa spełnia swój cel wyłącznie w hierarchii dziedziczenia.

abstract class SsakZujacyTrawe : Ssak {

public void ZucieTrawy()

{

Console.WriteLine("zucie trawy");

}

}

Klasa abstrakcyjna może zawierać metody abstrakcyjne. Metoda abstrakcyjna działa w podobny sposób jak metoda wirtualna poza tym, że nie posiada swojego ciała. Klasa dziedzicząca musi implementować tę metodę. Metoda abstrakcyjna nie może być prywatna. Skoro klasa dziedzicząca musi implementować tę metodę to logicznie myśląc metoda nie może być prywatna ponieważ wtedy klasa dziedzicząca nie będzie miała do niej dostępu.

abstract class SsakZujacyTrawe : Ssak {

public abstract void ZucieTrawy();

}

7. Polimorfizm - interfejsy w C#; "dziedziczenie" interfejsów.

Polimorfizm - możliwość stworzenia obiektu, który może mieć więcej niż jedną formę. W praktyce oznacza to, że może on mieć metodę, która dla tego samego typu obiektów mają różne definicje. Polimorfizm pomaga zmniejszyć skomplikowane programy dzięki zastosowaniu tego samego interfejsu dla klas o podobnych właściwościach. Modyfikator virtual stosuje się w nagłówku metody umieszczonej w klasie, która będzie klasą bazową. Taka metoda (zwana wirtualną) będzie mogła być zmieniona przez metody składowe przesłaniające (zawierające modyfikator override w nagłówku), znajdujące się w klasach pochodnych.

Interfejs -informuje klasę, która go implementuje, jakie ma zawierać, metody, własności, indeksery, ale nie mówi jak mają one wykonywać operacje. Klasa może dziedziczyć po wielu interfejsach .Przy czym każda metoda będąca w interfejsie musi być zaimplementowana w klasie.

8 Użycie typów i metod generycznych na wybranym przykładzie typu wbudowanego w .NET.

Typ generyczny – jest to typ ogólny, parametr, który jest typem. Definiowanie typu generycznego zapisujemy

class NazwaKlasy <T>

Tworzenie typów generycznych

Istnieje możliwość tworzenia własnych klas generycznych. Jedyne, co musimy zrobić, to na końcu nazwy dodać frazę <T>:

class Generic<T>

{

}

Teraz przy tworzeniu egzemplarza klasy kompilator będzie wymagał, aby podać również typ danych, na których ma ona operować np.:

Generic<string> MyGeneric = new Generic<string>();

Przyjęło się, że przy deklarowaniu typów generycznych stosujemy frazę <T>. Kompilator nie wymusza jednak takiego nazewnictwa, więc równie dobrze możemy napisać: class Generic<Type> {}.
Po zadeklarowaniu takiej klasy w jej obrębie typ T będzie oznaczał typ danych podany podczas jej tworzenia. Można go dowolnie wykorzystywać. Np.:

class Generic<T>

{

public void Add(T X)

{

Console.WriteLine("{0}", X);

}

Obsługa takiej klasy wiąże się z odpowiednim utworzeniem obiektu:

Generic<string> MyGeneric = new Generic<string>();

MyGeneric.Add("Hello World!");

Metody generyczne

Istnieje również możliwość deklarowania metod generycznych. Ich tworzenie wygląda bardzo podobnie:

static void Foo<T>(T Bar)

{

Console.WriteLine("{0}", Bar);

}

Wywołując taką metodę, możesz, aczkolwiek nie musisz, podawać typu danych - np.:

Foo("Adam"); // dobrze

Foo<int>(12); // dobrze

Kompilator domyśli się typu na podstawie przekazanych parametrów.

9.Atrybuty i mechanizm refleksji

Atrybut to mechanizm, który służy do dodawania do naszego programu metadanych za pomocą instrukcji bądź innych danych. Metadane to informacje jakie są przechowywane w plikach wykonywalnych i które opisują typy czy metody umieszczone w tych plikach. Z atrybutami ściśle powiązany jest mechanizm refleksji, gdyż program używa go do odczytu własnych metadanych bądź metadanych innych programów. Innymi słowy, nasz program „rzuca refleksję” sam na siebie bądź na program, z którego chcemy sczytać właśnie metadane, a następnie te metadane można wyświetlić na ekranie komputera lub dzięki nim zmodyfikować dalsze działanie naszej aplikacji.

Poniższa tabela prezentuje wszystkie możliwe adresaty atrybutów:

Nazwa adresata Zastosowanie
All Można stosować do dowolnego elementu: pliku wykonywalnego, konstruktora, metody, klasy, zdarzenia, pola, właściwości czy struktury
Assembly Można stosować do samego podzespołu (pliku wykonywalnego)
Class Można stosować do klasy
Constructor Można stosować do konstruktora
Delegate Można stosować do delegata
Enum Można stosować do wyliczenia
Event Można stosować do zdarzenia
Field Można stosować do pola
Interface Można stosować do interfejsu
Method Można stosować do metody
Parametr Można stosować do parametru metody
Property Można stosować do właściwości (get i set)
ReturnValue Można stosować do zwracanej wartości
Struct Można stosować do struktury

10.Serializacja

jest procesem konwertowania obiektu na strumień bajtów, aby zapisać obiekt lub przekazuje je do pamięci, bazy danych lub plik. Jego głównym celem jest zapisanie stan obiektu, aby móc odtworzyć go w razie potrzeby. Przeciwny proces jest nazywany deserializacji.

Zastosowania do serializacji

Serializacja pozwala programiście do zapisywania stanu obiektu i odtworzyć ją zależnie od potrzeby, zapewnienie składowania obiektów, jak również wymiany danych. Za pomocą serializacji Deweloper można wykonywać czynności, takich jak wysyłanie obiekt do zdalnej aplikacji przy użyciu usługi sieci Web, przekazując obiekt z jednej domeny do innej, przekazując obiekt przez zaporę jako ciąg znaków XML lub obsługę zabezpieczeń lub informacje specyficzne dla użytkownika w aplikacji.

11.UML

jest językiem znormalizowanym, służącym do zapisywania projektu systemu. Może być stosowany do obrazowania, specyfikowania, tworzenia i dokumentowania artefaktów powstałych podczas procesu budowy systemu informatycznego. UML służy do obrazowania, specyfikowania i dokumentowania systemów obiektowych. UML jest przede wszystkim przeznaczony do budowy systemów informatycznych.

Przykładowe obszary zastosowań:

• tworzenie systemów informatycznych przedsiębiorstw,

• usług bankowych i finansowych.

• rozproszone usługi internetowe

Figura
polozenie

Przesuń()

obroc ()

wyświetl ()

Przykład pojedynczej klasy

interfejs jest definicją abstrakcyjnego typu posiadającego jedynie operacje, a nie dane. Kiedy w konkretnej klasie zdefiniowane są wszystkie metody interfejsu mówimy, że klasa implementuje dany interfejs. W programie mogą być tworzone zmienne typu referencja do interfejsu, nie można natomiast tworzyć obiektów tego typu. Referencja może wskazywać na obiekt dowolnej klasy implementującej dany interfejs. Interfejs określa udostępniane operacje, nie zawiera natomiast ich implementacji i danych. Z tego powodu klasy mogą implementować wiele interfejsów, bez problemów wynikających z wielokrotnego dziedziczenia. Wszystkie metody w interfejsie z reguły muszą być publiczne.

deklaracja interfejsu:
interface nazwa_interfejsu

{

}

12.Klasy częściowe

W przeciwieństwie do zwykłych klas, definicja klasy częściowej może być rozszerzona na więcej, niż jeden plik. Umożliwia to lepsze radzenie sobie z dużymi ilościami kodu. Podczas kompilacji wszystkie częściowe definicje łączone są w kompletną klasę, dzięki czemu nie ma żadnych funkcjonalnych różnic między nimi a zwykłymi klasami.

public partial class Employee

{

public void DoWork()

{

}

}

public partial class Employee

{

public void GoToLunch()

{

}

13.Przeciążanie operatorów

Aby zdefiniować zachowania danego operatora musi go nadpisać. Nadpisanie wygląda jak utworzenie nowej metody która, zwraca coś i potrzebuje określonej ilości parametrów do działania. Różnica polega na zastosowaniu słowa kluczowego “operator” wraz z symbolem operatora, którego nadpisujemy.
W tym przykładzie w strukturze Minuty zostaje nadpisany operator plus. Dodałem do niej też właściwość dla przypomnienia poprzedniego wpisu.

struct Minuty

{

public static Minuty operator +(Minuty lhs,Minuty rhs)

{

return new Minuty(lhs.value + rhs.value);

}

private int value;

public Minuty(int firstValue)

{

value = firstValue;

}

public int Value

{

get { return this.value; }

set { this.value = value; }

}

}

Jakie są najważniejsze punkty i obserwacje w tym przykładzie:

Metoda nadpisująca operator musi być publiczna.

Operator musi być statyczny. Skoro muszą być statyczne operatory nie mogą być wirtualne, abstrakcyjne czy zamknięte. Każdy operator ma określoną liczbę argumentów dla znaku “+” muszą to być dwa argumenty.

struct Minuty {

public static Minuty operator +(Minuty lhs,Minuty rhs) {

return new Minuty(lhs.value + rhs.value);

}

public static Minuty operator +(Minuty lhs,int rhs) {

return new Minuty(lhs.value + rhs);

}

public static Minuty operator +(int lhs, Minuty rhs) {

return new Minuty(lhs + rhs.value);

}

14.Destruktor
Destruktor pozwala na wykonanie porządków kiedy obiekt nie jest już potrzebny. Destruktor tak jak konstruktor jest specjalną metodą . Jest on jednak wywoływany gdy ostatnia referencja do obiektu zniknie.
Wyrażenie opisujące destruktor zaczyna się od znaku “~” po nim jest nazwa klasy. Oto prosty przy-kład użycia destruktora. Klasa posiada pole statyczne, które liczy liczbę instancji swojej klasy. W konstruktorze liczba instancji powinna wzrastać ponieważ tworzy nowy obiekt ,a w destruktorze ta liczba powinna być odejmowana skoro obiekt jest sprzątany.

class TotalnaKlasa
{
public TotalnaKlasa()
{
liczbaInstancj++;
}

~TotalnaKlasa()
{
liczbaInstancj--;
}

private static int liczbaInstancj = 0;

public static int LiczbaInstancj()
{
return liczbaInstancj;
}
}
• Nie można zdefiniować destruktora w strukturach. Są one używane tylko z klas.
• Klasa może mieć tylko jeden destruktor.
• Destruktory nie mogą być dziedziczone ani przeciążone.
• Nie można wywołać destruktorów. Są one wywoływane automatycznie.
• Destruktora podjąć modyfikatorów lub nie mają parametrów

15.Hierarchia Klas

using System;

class A

{

public A(){Console.WriteLine("A");}

}

class B : A

{

public B():base(){Console.WriteLine("B");}

}

class C : B

{

public C() : base() { Console.WriteLine("C"); }

}

class Pokaz

{

public static void Main()

{

C c = new C();//gdy tworzymy obiekt konstruktory wywołują się zaczynając od klasy najwyżej w hierarchi czyli A -> B -> C

}

}

16.Metody statyczne

Aby wywołać zwykłą metodę należy w pierwszej kolejności zadeklarować i zainicjować obiekt danej klasy. Jeśli metoda działa na rzecz struktur zawartych w tej samej klasie nie ma w tym nic złego. Natomiast jeśli chcemy tworzyć metody, które nie operują na strukturach klasy powinniśmy posłużyć się metodami statycznymi. Można je wywoływać nie tworząc bytu obiektu i tym samym nie alokować dodatkowej pamięci.
Używanie metod statycznych niesie za sobę pewne ograniczenia:
-nie możemy ich wywoływać na rzecz stworzonego obiektu (tzn. że jeśli stworzymy obiekt klasy, która zawiera metodę statyczną to nie będzie ona dostępna dla tego obiektu)

-możemy w nich odwoływać się tylko do metod, które są również zadeklarowane jako statyczne (nie odwołują się na rzecz obiektu)

Przykład

Dobrym przykładem już zaimplementowanych metod statycznych w środowisku VS C# są metody klasy Convert:
int liczba = Convert.ToInt32("123");

Wywołujemy metodę ToInt32() zawartą w klasie Convert nie tworząc obiektu tej klasy.

Aby zadeklarować ,że dana zmienna bądź metoda jest statyczna musimy dopisać słowo kluczowe static po modyfikatorze dostępu ,ale przed określeniem typu.

class Arytmetyka

{

public static int Dodawanie(int a, int b)

{

return a + b;

}

}

Teraz możesz mieć dostęp do tej metody poprzez odwołanie się do samej nazwy klasy. Jak to widać w kodzie.

int wynik = Arytmetyka.Dodawanie(1, 10);

17.Metody wirtualne pozwalają na przesłanianie (zastępowanie) metod w podklasach.
1.Do definiowania metody wirtualnej służy słowo kluczowe: virtual

2. Aby zasłonić metodę z klasy bazowej w klasie nadrzędnej należy zdefiniować funkcje ze słowem kluczowym override z dokładnie tą samą nazwą i parametrami.

3. Aby odwołać się do przesłoniętej metody należy użyć słowa kluczowego base.

4. Nie jest wymogiem przesłanianie metody wirtualnych w klasach nadrzędnych

Aby stworzyć metodę wirtualną trzeba użyć słowa kluczowego virtual .

class Ssak

{

public virtual void SenRem()

{ }

}

Aby nadpisać metodę musimy użyć słowa kluczowego overrride.

class Ssak

{

public virtual void SenRem()

{ }

public override string ToString()

{

return "Jestem Ssakiem";

}

}


Wyszukiwarka

Podobne podstrony:
1 sciaga ppt
metro sciaga id 296943 Nieznany
ŚCIĄGA HYDROLOGIA
AM2(sciaga) kolos1 id 58845 Nieznany
Narodziny nowożytnego świata ściąga
finanse sciaga
Jak ściągać na maturze
Ściaga Jackowski
Aparatura sciaga mini
OKB SCIAGA id 334551 Nieznany
Przedstaw dylematy moralne władcy i władzy w literaturze wybranych epok Sciaga pl
fizyczna sciąga(1)
Finanse mala sciaga
Podział węży tłocznych ze względu na średnicę ściąga
OLIMPIADA BHP ŚCIĄGAWKA
Opracowanie Sciaga MC OMEN
Finanse Sciaga3 (str 7) id 171404
ściąga 2

więcej podobnych podstron