Абстрактен клас срещу клас бетон
Повечето от популярните модерни обектно ориентирани езици за програмиране като Java и C # са базирани на класа. Те постигат обектно ориентираните понятия като капсулиране, наследяване и полиморфизъм чрез използването на класове. Класовете са абстрактно представяне на обекти от реалния свят. Класовете могат да бъдат конкретни или абстрактни в зависимост от степента на изпълнение на техните функционални функции. Бетонен клас напълно прилага всички свои методи. Абстрактен клас може да се разглежда като ограничена версия на обикновен (конкретен) клас, където може да съдържа частично реализирани методи. Обикновено конкретните класове се наричат (само) класове.
Какво е клас бетон?
Класът по подразбиране е конкретен клас. Ключовата дума клас се използва за дефиниране на класове (например в Java). И обикновено те са просто посочени като класове (без прилагателното конкретно). Конкретните класове изобразяват концептуалното представяне на обекти от реалния свят. Класовете имат свойства, наречени атрибути. Атрибутите се реализират като глобални и променливи на инстанции. Методите в класовете представляват или дефинират поведението на тези класове. Методите и атрибутите на класовете се наричат членовете на класа. Обикновено капсулирането се постига, като атрибутите станат частни, като същевременно се създадат публични методи, които могат да се използват за достъп до тези атрибути. Обект е инстанцията на клас. Наследяването позволява на потребителя да разширява класове (наречени подкласове) от други класове (наречени суперкласове). Полиморфизмът позволява на програмиста да замести обект от клас вместо обект от неговия суперклас. Обикновено съществителните, намиращи се в определението на проблема, директно стават класове в програмата. И по същия начин глаголите се превръщат в методи. Публични, частни и защитени са типичните модификатори за достъп, използвани за класовете.
Какво е абстрактен клас?
Абстрактните класове се декларират с помощта на абстрактна ключова дума (например в Java,). Обикновено абстрактните класове, известни също като абстрактни базови класове (ABC), не могат да бъдат създадени (екземпляр от този клас не може да бъде създаден). Така че абстрактните класове имат смисъл да имат само ако езикът на програмиране поддържа наследяване (способност за създаване на подкласове от разширяване на клас). Абстрактните класове обикновено представляват абстрактно понятие или образувание с частично или без прилагане. Следователно абстрактните класове действат като родителски класове, от които се извличат детски класове, така че класът деца ще споделя непълните характеристики на родителския клас и може да се добави функционалност за завършването им.
Абстрактните класове могат да съдържат абстрактни методи. Подкласовете, разширяващи абстрактен клас, могат да реализират тези (наследени) абстрактни методи. Ако детският клас прилага всички такива абстрактни методи, той се превръща в конкретен клас. Но ако това не стане, класът на децата също се превръща в абстрактен клас. Всичко това означава, че когато програмистът определи клас като абстракт, тя казва, че класът ще бъде непълен и ще има елементи, които трябва да бъдат попълнени от наследяващите подкласове. Това е хубав начин за създаване на договор между двама програмисти, който опростява задачите в разработката на софтуер. Програмистът, който пише код за наследяване, трябва точно да следва определенията на метода (но разбира се, може да има собствена реализация).
Каква е разликата между абстрактен клас и клас бетон?
Абстрактните класове обикновено имат частична или никаква реализация. От друга страна, конкретните класове винаги имат пълно прилагане на неговото поведение. За разлика от конкретните класове, абстрактните класове не могат да бъдат инстанцирани. Следователно абстрактните часове трябва да бъдат разширени, за да бъдат полезни. Абстрактните класове могат да съдържат абстрактни методи, но конкретните класове не могат. Когато абстрактният клас е разширен, всички методи (и абстрактни, и конкретни) се наследяват. Наследеният клас може да реализира всеки или всички методи. Ако всички абстрактни методи не са приложени, тогава този клас също се превръща в абстрактен клас.