Klasa abstrakcyjna kontra klasa betonowa
Większość popularnych współczesnych obiektowych języków programowania, takich jak Java i C #, jest oparta na klasach. Osiągają koncepcje obiektowe, takie jak enkapsulacja, dziedziczenie i polimorfizm poprzez zastosowanie klas. Klasy są abstrakcyjną reprezentacją obiektów świata rzeczywistego. Klasy mogą być konkretne lub abstrakcyjne, w zależności od poziomu implementacji funkcjonalności ich metod. Konkretna klasa całkowicie wdraża wszystkie swoje metody. Klasa abstrakcyjna może być uważana za ograniczoną wersję zwykłej (konkretnej) klasy, w której może zawierać częściowo zaimplementowane metody. Zazwyczaj konkretne klasy są nazywane klasami (tylko).
Co to jest klasa betonu?
Domyślna klasa to konkretna klasa. Słowo kluczowe class służy do definiowania klas (np. W Javie). I zwykle są one po prostu nazywane klasami (bez przymiotnika). Konkretne klasy przedstawiają konceptualną reprezentację rzeczywistych obiektów. Klasy mają właściwości zwane atrybutami. Atrybuty są implementowane jako zmienne globalne i zmienne instancji. Metody w klasach reprezentują lub definiują zachowanie tych klas. Metody i atrybuty klas nazywane są członkami klasy. Zazwyczaj hermetyzacja jest osiągana przez uczynienie atrybutów prywatnymi, przy jednoczesnym utworzeniu metod publicznych, których można użyć do uzyskania dostępu do tych atrybutów. Obiekt jest instancją klasy. Dziedziczenie pozwala użytkownikowi rozszerzać klasy (zwane podklasami) z innych klas (zwanych superklasami). Polimorfizm pozwala programiście podstawić obiekt klasy w miejsce obiektu jego superklasy. Zazwyczaj rzeczowniki znalezione w definicji problemu stają się bezpośrednio klasami w programie. Podobnie czasowniki stają się metodami. Publiczne, prywatne i chronione to typowe modyfikatory dostępu używane w klasach.
Co to jest klasa abstrakcyjna?
Klasy abstrakcyjne deklarowane są za pomocą słowa kluczowego Abstract (np. W Javie). Zazwyczaj klasy abstrakcyjne, znane również jako abstrakcyjne klasy podstawowe (ABC), nie mogą być tworzone (nie można utworzyć instancji tej klasy). Tak więc klasy abstrakcyjne mają sens tylko wtedy, gdy język programowania obsługuje dziedziczenie (możliwość tworzenia podklas po rozszerzeniu klasy). Klasy abstrakcyjne zwykle reprezentują abstrakcyjne pojęcie lub encję z częściową implementacją lub bez jej implementacji. Dlatego klasy abstrakcyjne działają jako klasy nadrzędne, z których wywodzą się klasy podrzędne, dzięki czemu klasa podrzędna będzie dzielić niekompletne funkcje klasy nadrzędnej i można ją dodać, aby je uzupełnić.
Klasy abstrakcyjne mogą zawierać metody abstrakcyjne. Podklasy rozszerzające klasę abstrakcyjną mogą implementować te (odziedziczone) metody abstrakcyjne. Jeśli klasa potomna implementuje wszystkie takie metody abstrakcyjne, staje się klasą konkretną. Ale jeśli nie, klasa potomna staje się również klasą abstrakcyjną. Oznacza to, że gdy programista nominuje klasę jako streszczenie, mówi, że klasa będzie niekompletna i będzie zawierała elementy, które muszą zostać uzupełnione przez dziedziczące podklasy. To dobry sposób na zawarcie umowy między dwoma programistami, która upraszcza zadania związane z tworzeniem oprogramowania. Programista, który pisze kod do dziedziczenia, musi dokładnie przestrzegać definicji metod (ale oczywiście może mieć własną implementację).
Jaka jest różnica między klasą abstrakcyjną a klasą betonową?
Klasy abstrakcyjne zwykle mają częściową implementację lub jej brak. Z drugiej strony, konkretne klasy zawsze mają pełną implementację swojego zachowania. W przeciwieństwie do klas konkretnych klasy abstrakcyjne nie mogą być tworzone. Dlatego klasy abstrakcyjne muszą zostać rozszerzone, aby były użyteczne. Klasy abstrakcyjne mogą zawierać metody abstrakcyjne, ale konkretne klasy nie. Po rozszerzeniu klasy abstrakcyjnej dziedziczone są wszystkie metody (zarówno abstrakcyjne, jak i konkretne). Dziedziczona klasa może implementować dowolną lub wszystkie metody. Jeśli wszystkie metody abstrakcyjne nie zostaną zaimplementowane, klasa ta stanie się również klasą abstrakcyjną.