Pojęcia "przedmiot" i "klasa" są znane każdej osobie. Jednak dla projektantów komputerowych mają one swój własny podtekst. Są to podstawowe pojęcia w programowaniu obiektowym. Klasy - rodzaj danych jest określany przez programistę, który charakteryzuje sposób ich przesyłania i przechowywania, profil użytkowania i zestaw działań, które mogą wykonać. Różnią się tym, co można zaimplementować jako interfejs.
Co to jest OOP (programowanie obiektowe)
Abstrakcja
Staramy się selektywnie skupiać wyłącznie na tych rzeczach, które są dla nas ważne (w życiu) lub na naszym module (w programowaniu). Zmiana jednego niezależnego modułu nie wpływa na inne. Jedyne, co musisz wiedzieć, to to, co nam daje. Osoba korzystająca z tego modułu nie musi się martwić o to, jak zadanie zostanie rozwiązane, co dzieje się w tle.
Enkapsulacja
Dziedziczenie
Polimorfizm
Cechy pojęć "klasa" i "przedmiot"
typ
TForml = klasa (TForm)
Buttonl: TButton;
procedura ButtonlClick (Sender: TObject);
koniec;
może
Forml: TForml;
Jeżeli chcemy modelować w naszym programie, takich jak samochód, musi zdefiniować swoje atrybuty: model, paliwo, markę, kolor, jego zachowanie i tzw, począwszy od silnika, hamowanie, przyspieszanie, etc. . Oczywiste jest, że wskaźniki te są charakterystyczne nie tylko dla jednej marki lub modelu pojazdu.
W podejściu obiektowym staramy się uogólniać nasz obiekt (samochód), twierdząc, że będziemy modelować w naszym programie będzie miał liczbę atrybutów i metod. Mogą być też inne parametry i charakterystyki pojazdu, ale mamy wymienione na tyle, aby zrozumieć, jak klasa w OWP.
Kiedy używamy tych danych, tworzymy samochód o określonych parametrach. Podczas programowania sam obiekt (samochód), można wziąć inne cechy, jak pokazano w poniższej tabeli:
Przedmiot 1 | Przedmiot 2 |
model: Vaz 2107 | model: Vaz 2109 |
paliwo: benzyna | paliwo: olej napędowy |
kolor: czerwony | kolor: zielony |
metoda uruchamiania silnika: Start () | sposób uruchomienia silnika: Start() |
metoda hamowania: przerwa () | metoda hamowania: przerwa () |
Metoda przyspieszania: Przyspieszenie () | Metoda przyspieszania: Przyspieszenie () |
Zatem programowanie obiektowe ułatwia symulację zachowania złożonego systemu w świecie rzeczywistym. Z danych OOP i funkcji (atrybuty i metody) są połączone w obiekcie. Zapobiega to potrzebom jakichkolwiek ogólnych lub globalnych danych OOP. Podejście to jest główną różnicą między podejściami obiektowymi i proceduralnymi.
Na klasy OOP składają się elementy różnych typów:
- Pola danych: przechowuj status klasy za pomocą zmiennych i struktur.
- Metody: podprogramy do manipulowania określonymi danymi.
- Niektóre języki pozwalają na trzeci typ własności. To jest coś pomiędzy dwoma pierwszymi.
Metody
Zachowanie klasy lub jej wystąpień określa się za pomocą metod. Jest to podprogram z możliwością obsługi obiektów. Operacje te mogą zmienić status obiektu lub po prostu zapewnić sposoby dostępu do niego.
& lt; script type = "text /javascript" & gt;
blockSettings var = {blockID "R-A-70350-45" renderTo "yandex_rtb_R-A-70350-45", asynchroniczny :! 0};
jeśli (document.cookie.indexOf ("abmatch =") i GT = 0) blockSettings.statId = 70350;
! Zastosowanie (a, b, c, d, e) {A [c] = A [c] || [] A [c] .Push (funkcja () {Ya.Context.AdvManager.render (blockSettings)}), e = b.getElementsByTagName ("scenariusz")d = b.createElement ("scenariusz") d.type = "text /JavaScript" d.src = „//an.yandex .ru /System /context.js "d.async = 0e.parentNode.insertBefore (d, e)} (to this.document," yandexContextAsyncCallbacks „);
Istnieje wiele metod. Ich wsparcie zależy od języka. Niektóre są tworzone i wywoływane przez kod programisty, inne (specjalne, takie jak konstruktory,destruktory i operatory konwersji) są tworzone i wywoływane przez wygenerowany kod kompilatora. Język może pozwolić programistowi na zdefiniowanie tych specjalnych metod.
Interfejs
Jest to definicja grupy działań abstrakcyjnych. Dowiaduje się, jakie zachowanie powinien wyświetlać dany obiekt, bez określania sposobu jego implementacji.
Obiekt może mieć wiele ról, a użytkownicy mogą go używać z różnych punktów widzenia. Na przykład obiekt typu "człowiek" może odgrywać rolę:
- Żołnierz (z zachowaniem "strzelaj do wroga").
- Mężczyzna (z zachowaniem "kochaj swoją żonę").
- Podatnik (z zachowaniem "płacenia podatków") i tak dalej.
Jednak każdy obiekt realizuje swoje zachowanie na swój własny sposób: Misha płaci podatki na czas, Andrew z opóźnieniem, a Peter nie robi tego w ogóle. To samo można powiedzieć o każdym przedmiocie i innych rolach.
Powstaje pytanie, dlaczego klasa bazowa wszystkich obiektów nie jest interfejsem. Powodem jest to, że w tym przypadku każda klasa będzie musiała wdrożyć małą, ale bardzo ważną grupę metod, która zajmie niepotrzebne ilości czasu. Okazuje się, że nie wszystkie klasy wymagają konkretnej implementacji - domyślnie domyślnie w większości przypadków wystarczy. Nie ma potrzeby ignorowania jakichkolwiek metod, ale jeśli sytuacja tego wymaga, możliwe jest wdrożenie ich zastąpienia.
Dobrym przykładem są przyciski z przodu telewizora. Można powiedzieć, że są one interfejsem między użytkownikiem a okablowaniem po drugiej stronie obudowy urządzenia.Osoba klika przycisk zasilania, aby włączyć i wyłączyć urządzenie. W tym przykładzie konkretny telewizor jest instancją, każda metoda reprezentowana przez przycisk, a wszystkie razem tworzą interfejs. W najpowszechniejszej formie jest to specyfikacja grupy powiązanych metod bez ich implementacji.
Projektant
Kryterium to jest odpowiedzialne za przygotowanie obiektu do działania, na przykład do ustawienia wartości początkowych dla wszystkich jego danych i ich elementów. Chociaż odgrywa on szczególną rolę, konstruktor jest po prostu kolejną funkcją, która pozwala przekazywać informacje poprzez listę argumentów. Możesz ich użyć do zainicjowania ich. Nazwisko projektanta klasy jest takie samo.
W poniższym przykładzie wyjaśniono pojęcie konstruktora klasy w C ++ (wspólny język programowania):
#include
using namespace std;
wiersz klasy {
publiczny:
void setLength (double len);
double getLength (void);
Linia (); //Deklaracja projektanta
prywatna: podwójna długość;
};
//Definicja funkcji, w tym konstruktor
Linia :: Linia (void) {
cout "Object created" endl;
}
void Line :: setLength (double len) {
length = len;
}
double Line :: getLength (void) {
return length;
}
//Treść programu
int main () {
Linia prosta;
//Długość linii
line.setLength (6.0);
cout "Length of line:" line.getLength () endl;
return 0;
}
Po skompilowaniu i wykonaniu powyższego kodu otrzymuje następujący wynik:
Obiekt utworzony
Długość linii: 6
Destruktor
Jest to specjalna funkcja klasy, która niszczy obiekt jakotylko obszar jego działania się kończy. Destruktor przez kompilator jest wywoływany automatycznie, gdy obiekt jest poza zasięgiem wzroku.
Składnia destruktora jest taka sama jak dla projektanta, ale nazwa klasy stosowanej w tym przypadku dla niego znak tyldy „~” jako przedrostek.
Następujący przykład w języku C ++ destructor wyjaśnia koncepcję:
# include
za pomocą namespace std;
wiersz klasy {
publiczny: void setLength (double len);
double getLength (void);
Linia (); //Adnotacje projektanta
~ Linia (); //Ogłoszenie Destroyer
prywatne: podwójna długość;
}
//Definicja funkcji, oraz z konstrukcją
Linia :: linii (void) {
Cout "utworzonego obiektu" endl;
}
Line :: ~ Line (void) {
cout "Obiekt jest zdalny" endl;
}
void Line :: setLength (double len) {
length = len;
}
podwójna linia :: getLength (void) {
długość powrotu;
}
//Ciało programu
int main () {
Linia prosta;
//Długość linii
line.setLength (6.0);
cout "Length of line:" line.getLength () endl;
return 0;
}
,
, podczas stosowania powyższego kompilacji kodu i wykonany, to daje następujące wyniki:
przeznaczony ustalone [193 ]
Długość linii: 6
odległy obiekt
, jakie są zalety klas
korzyści z organizowania programu w klasach o ' obiekty są podzielone na trzy kategorie:Szybki rozwój. Łatwa konserwacja. Ponowne użycie kodu i projektu.
Klasy i OWP generalnie przyczyniają się do szybkiego rozwoju, ponieważ zmniejszają różnicę semantyczną między kodem a użytkownikami. Wartooceniane przez wielu programistów. Dzięki temu systemowi analitycy mogą komunikować się z programistami i użytkownikami za pomocą tego samego słownika, mówiąc o kontach, klientach, kontach itd. Klasy obiektów często przyczyniają się do szybkiego rozwoju, ponieważ większość środowisk zorientowanych obiektowo ma rozbudowane narzędzia do debugowania i testowania. Instancje klasy można sprawdzić podczas wykonywania, aby upewnić się, że system działa poprawnie. Ponadto, zamiast pobierania zrzutu jądra, większość środowisk zorientowanych obiektowo interpretuje możliwości debugowania. W rezultacie programiści mogą dokładnie przeanalizować miejsce wystąpienia błędu w programie i sprawdzić, jakie metody, argumenty i wartości zostały użyte.