Upload
cezary-walenciuk
View
6.115
Download
8
Embed Size (px)
DESCRIPTION
Citation preview
MaxymalnaWiedza
Cezary Walenciuk
http://cezarywalenciuk.blogspot.com/2011/06/kurs-obiektowosc-w-c-klasa-i-obiekty-01.html
Jak poznałem waszą matkę
Dzieci zanim poznałem waszą matkę musiałem rozwinąć swoją kariere jako programista w C#.
Dzisaj w 2030 roku mamy notesy które wyglądają jak smartphony.
Każdy znas ma implaty które wyświetlają statusy Facebook i Google+
...trój wymiarowe monitory
Mamy też elektryczne kupki które wyświetlają efektowne informacje...które nikomu nie są potrzebne
2011
Ale dzieci w 2011 roku tych rzeczy nie było. Chociaż dla was zapewne to codzienność i jedny stały obraz rzeczywistości.
2011
2011 roku nie programowałem kupków ani elektronicznych notesów. W 2011 rozpoczynałem programowanie w Windows Phone 7 dla mojej firmy.
2011
Była to moja życiowa szansa ponieważ w Białej Podlaskiej nie mogłem się rozwinąć. W Warszawie miałem prace, przyjaciół i szkołe. Wszystko to ułożyło się w przeciągu 2 miesięcy...to było moje przeznaczenie.
2011
Z drugiej strony było to ogromne wyzwanie. Wcześniej nudziłem się jak cholera. Teraz nie miałem czasu na nic. Jednak to i tak była nie wielka cena za tą życiową szanse.
2011
W listopadzie 2011 roku prowadziłem wykład na grupie PJWSTK i ten wykład miał wielki wypływ na dalszą część mojego życia.
Max Payne
Nie było żadnych błędów. Klient nie narzekał...i jeszcze sprawiło mi to przyjemność...
Ten ostatni kod był jak wykrzyknik podsumuwjący wszysto to co doporwadziło mnie aż tutaj. Puściłem klawiaturę i było już po wszystkim.
Jednak aby moja historia miała jakikolwiek sens musze się cofnąc o trzy lata. Kiedy to przyszychodziłem na wykłady o C#.
Wtedy programowałem w Javie. Ale nie byłem naiwny. Platforma nie miała dla mnie znaczenia liczyło się tylko kto i ile dla mnie zapłaci.
Programista tak naprawdę jest twórcą funkcjonalności biznesowy. Dla tych z wyższej warstwy rezultat był najważniejszy ,a nie technologia czy platforma.
Każdy kto myślał innaczej był frajerem. W tej braży istnieje zbyt duży podział pomiędzy klientem ,a programistą. Kasa płynie rurami ,a informacje przeciekają. Wszyscy są wkurzeni i wszyscy wszytkich obwiniają.
Nie miałem złudzej programowanie nie miało nic wspólnego z dobrą zabawą.
Jednak przyszedłem na wykład o C# prowadzonego przez Cezarego Walenciuk-a.
Koleś był dziwny. Prowadził bloga ,ale nie wyglądał na kolejnego ciasnego w garniturze. Nie widziałem jeszcze takiego typa.
Miał on dziwny styl prezentowania.
Zamiast odrazu monotonym głosem wytłumaczać co jak pokazywał on dziwne pochrzanione obrazki.
Te pozytywne przeczucie uderzyło mnie jak kod SQL-INJECTION prosto w twarz. Coś tu było fajnego chociaż jeszcze nie pojawił się ani jeden fragment kodu.
Programistyczny sen
Wkońcu skończył on pokazywać dziwne obrazki i opowiadać o sobie.
Chciałem zobaczyć czy ten dzieciak umie przekazać troche wiedzy.
Klasa
Klasa
Różnica pomiędzy klasą a obiektem jest taka ,że obiekt jest instancją danej klasy. Czyli różnica pomiędzy nimi jest niczym jak kategoria kot ,a konkretny kot. Nie można się bawić z “pojęciem kot” tylko z jego konkretnym egzemplarzem.
Demo
Utworzenie klasy Kot
Omówienie konstruktora
Statyczne klasy
Klasy anonimowe
Modyfikator dostępu
Java
class Kobieta {
private Piersi Cycki;
public Piersi PokazCyckiWybranemu(Facet facet) {
return Cycki; }
}
C#
DEMO
Typ referecyjny
,a typ wartościowy
Typy wartościowe
Typy takie jak int,float ,double ,char są typami wartościowymi.
Kiedy deklarujesz zmienną jako typ wartościowy kompilator alokuje kod w wystarczająco dużym bloku pamięci.
Czyli dla typu int kompilator rezerwuje 32 bitów pamięci ponieważ typ ten składa się z 4 bajtów.
int a = 121;
Typy referecyjne
Sprawa wygląda zupełnie inaczej z klasami. Kiedy deklarujesz obiekt klasy kompilator nie generuje kodu, który zarezerwowałby odpowiedni obszaru pamięci dla danego obiektu.
Kompilator w pamięci przechowuje adres (referencje) do innego bloku pamięci, gdzie jest przechowywana klasa. Pamięć ta dla klasy jest lokalizowana wtedy, gdy tworzymy nowy obiekt za pomocą słowa kluczowego new.
Kopiowanie
wartości
Czyszczenie
obiektów
Stos i Sterta
Stos jest zorganizowany niczym jak pudełka, które są ułożone pionowo jedne pod drugim. Kiedy metoda jest wywoływana każdy parametr jest wkładany do pudełka i układany pionowo jedno pod drugim. Każda zmienna jest powiązana z zawartością tego pudełka i one są umieszczane pod pudełkiem na stosie. Po skończonej metodzie wszystkie pudełka zostają usunięte.
Sterta wygląda jak kilka poziomo ułożonych pudełek ustawionych oddzielnie od siebie. Każde z tych pudełek ma na sobie napis czy jest wciąż używane. Gdy tworzymy nową instancje obiektu program wyszukuje puste nie używane pudełko i umieszcza w nim obiekt. Kiedy ostatnia referencja znika w którymś momencie Garbage Collector opróżni pudełko i ustawi je do ponownego użycia.
static void UtworzeObiekt(int h,int b) {
int a = 6; Cuboid cu; cu = new Cuboid(a, b, h);
}
Null - demo
Nie ma pustych obiektów
Facet tenkoles = null;
Typy wartościowe
bool? b = null; int? bb = null; float? bbb = null;
Ref Out
Cuboid cuboid = new Cuboid(1, 2, 3);string napis = "Ala ma kota"; int liczba = 121; NieZmienie(cuboid, liczba, napis);
static void NieZmienie(Cuboid cuboid, int liczba, string napis) {
cuboid = new Cuboid(44, 555, 666); liczba--; napis = "1234567890qwertyuiopasdfghj";
}
Cuboid cuboid = new Cuboid(1, 2, 3);string napis = "Ala ma kota"; int liczba = 121; Zmienie(ref cuboid, ref liczba, ref napis);
static void Zmienie(ref Cuboid cuboid, ref int liczba, ref string napis){
cuboid = new Cuboid(44, 555, 666); liczba--; napis = "1234567890qwertyuiopasdfghj";
}
Object boxing and
unboxing
System.Object obj2; object obj;
Boxing - pakowanie
int a = 121; object ob = a;
Jak właśnie widać zmienne object mogą referować się do jakiekolwiek obiektu referencyjnego. Mogą też przechowywać typy wartościowe.
Jednak to proste wyrażenie wymaga wyjaśnienia. Zmienne typu wartościowego żyją na stosie , a zmienna object żyje na stercie, czyli ona jest typu referencyjnego .
W wyniku tej operacji wartość ze stosu zmiennej “a” zostanie skopiowana na stertę i referencyjnie powiązana z zmienną typu object. Ta operacja nazywa się boxing – po polsku pakowaniem , a nie boksowaniem
UnBoxing - wypakowywanie
int a = 121; object ob = a;int b = (int)ob;
IS – AS
DEMO
Struktura i Klasa
Tablice
int[] numery; object[] obiekty;
int[] numery; numery = new int[3]; object[] obiekty = new object[2];
Wartości tablic
int[] tab = new int[5]; for (int i = 0; i < 5; i++) {
tab[i] = i; }
int[] dawaj = new int[3] { 1, 2, 3}; int[] dawaj2 = new int[] { 1, 2, 3, 4, 6, 7, 8, 9 };
Iteracja wobec tablic
Kopiowanie tablic
Tablice wielowymiarowe
Koniec
Prezentacja była ciekawa.A to dopiero początek Maxymalenj wiedzy.Wiedziałem ,że jutro czeka mnie jeszcze więcej zabawy.