Notatka na egzamin z Programowania obiektowego:
1.Klasa, dane (pola i właściwości) i metody, konstruktor, obiekt.
Typ to reprezentacja jakiegoś bytu. Czasem jest to byt abstrakcyjny, jak tabela danych lub wątek, czasem zaś coś bardziej widocznego, jak przycisk w oknie. Typ definiuje ogólne właściwości i zachowanie bytu.
W C# typ definiowany jest przez klasę, a konkretne egzemplarze klasy są znane jako obiekty. Klasa definiuje jakie metody i zmienne będą występować w obiekcie. Obiekt, który został stworzony na podstawie danej klasy nazywany jest jej instancją(egzemplarzem), składowymi klasy są dane(pola, właściwości) i metody. Przykład klasy w rzeczywistym świecie to na przykład : projekt samochodu. Obiektem jest samochód zbudowany na podstawie projektu (klasy)
Dane czyli:
-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.
Interfejsy
-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.
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() { }
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ł 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.
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ści 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.
Akcessory -(funkcje dostępu) specjalne narzędzia, które umożliwiają łatwy dostęp do zmiennych typu private przy zachowaniu bezpieczeństwa i elastyczności przy programowaniu
* Akcesory i właściwości
* Właściwość składa się z dwóch akcesorów:
- nie jest ani metodą ani zmienną
* właściwośc daje dostęp do pola prywatnego. Zamaskowane jest, że za właściwością kryje się
* funckja.
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.
Możliwości
i ograniczenia:
-Gdy klasa podstawowa deklaruje metody jako
wirtualną, w klasie pochodnej można zastąpić ją własną
implementacją metody.
- Przy abstrakcyjnych metodach w klasie po której dziedziczę trzeba nadpisać metodę dziedziczoną przy pomocy override w klasie pochodnej.
-gdy chce nadpisać metody z klasy po której dziedziczę muszę użyć modyfkatora new.
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.
Zasada Listkov:
Funkcje które używają wskaźników lub referencji do klas bazowych, muszą być w stanie używać również obiektów klas dziedziczących po klasach bazowych, bez dokładnej znajomości tych obiektów
6 Klasy i metody abstrakcyjne
Klasa abstrakcyjna to taka klasa która nie dostarcza nam dokładnych implementacji metod. Jeżeli metoda jest
abstrakcyjna to klasa również jest abstrakcyjna. Klasa abstrakcyjna to klasa, która nie może mieć swoich reprezentantów pod postacią obiektów, przy abstrakcyjnych metodach w klasie po której dziedziczę trzeba nadpisać metodę dziedziczoną przy pomocy override(nadpisać) w klasie pochodnej.
7 Polimorfizm - interfejsy w C#; "dziedziczenie" interfejsów.
Polimorfizm oznacza możliwość definiowania tej samej metody w wielu postaciach - jej działanie jest uzależnione od typu obiektu, dla którego będzie zastosowana. 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.
Interfejsy -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>
/*\
METODA GENERYCZNA
* drukuje (....
* 1.separator czym odzielone elementy listy
* 2.dowolna liczba argumentów
*
*/
class Program {
static void drukuj<T>(char separator,params T[] tablica)
{
Array.Sort(tablica);
for (int j = 0; j <tablica.Length - 1; j++)
Console.Write("{0}{1}", tablica[j], separator);
Console.Write("{0}\n", tablica[tablica.Length - 1]);
}
static void Main(string[] args) {
drukuj('x', 1,23,1,4,5,6,7,8,9,10 );
}
}
typy generyczne
using System.Text;
using System.Threading.Tasks;
/*
* bywa tak , że działamy na róznych typach obiektów
* taki typ wszystko to jest typ generyczny
* tworzymy stos generyczny
*/
class Stos<T> //<T> oznacza dowolny typ
{
T[] tab;
bool flaga = true;
int R, wsk;
public Stos(int r)
{
//1.rozmiar
//2.ustalanie wskaźnika
wsk = -1;
R=r;
tab = new T[R];
}
public T zdejmij()
{
if (wsk < 0) return default(T);
return tab[wsk--];
}
public void dodaj(T e) //wstawia element zwieksza wskaźnik o 1
{
/* Sprawdzamy przed dodaniem elemnetu czy nie przekroczy rozmiaru elemntu
*/
if (wsk < R - 1) { flaga = true; tab[++wsk] = e; }
else flaga = false;
}
public void drukuj()
{
if (wsk >= 0) Console.WriteLine("Ostatni element na stosie : {0} \n Stan Operacji : {1} ", tab[wsk],flaga);
else Console.WriteLine("Stos pusty");
}
}
class Program {
static void Main(string[] args)
{
Stos<int> a = new Stos<int>(3);
a.dodaj(1);
a.drukuj();
}
}