Клас (програмиране): Разлика между версии
Изтрито е съдържание Добавено е съдържание
→Абстрактни и конкретни: буквичка |
Termininja (беседа | приноси) Редакция без резюме |
||
Ред 1:
'''Класът''' е една от характеристиките на [[обектно-ориентирано програмиране|обектно-ориентираното програмиране]]. Това е съвкупност от [[променлива (програмиране)|променливи]] и [[функция (програмиране)|функции]], които са обвързани в логическа структура и работят заедно. Класът служи като модел за представяне на реални обекти и софтуерни обекти, описвайки атрибути (свойства) и методи (поведение) на обектите.
== Дизайн и приложение ==
=== Структура ===
=== Поведение ===
=== Концепцията за интерфейс на клас ===
=== Достъпи ===
== Взаимовръзки между класовете ==
Като допълнение към дизайна на самостоятелните класове, езиците за програмиране могат да поддържат по-сложен дизайн въз основа на връзки между класовете. Най-често срещаните типове междукласови връзки са композиционни и йерархични.
Line 19 ⟶ 14:
=== Йерархична ===
Класове могат да произлизат от един или повече вече съществуващи класове, формирайки по този начин йерархична взаимовръзка между първоизточниците (базови класове, бащини класове или супер-класове) и произлизащите класове (наследствени класове, суб-класове). Взаимовръзката между наследственият клас и базовият клас е широко известна, като „е“ връзка. Например, клас „Бутон“ може да произлиза от клас „Контрола“. Следователно, всеки Бутон е Контрола. Структурните и поведенчески членове на бащиният клас се онаследяват от наследственият клас. Наследствените класове могат да имат в себе си дефинирани допълнителни структурни членове (полета данни) и/или поведенчески членове (методи), в допълнение към наследените такива. Също така в някои езици за програмиране е позволено, суб-класовете да отменят и/или предефинират наследени методи.
Не всички езици позволяват множествено наследяване. Например Java позволява даден клас да имплементира множество интерфейси, но да наследява от само един клас. В случай, че множественото наследяване е позволено, йерархията е тип насочен ацикличен граф (или НАГ за по-кратко), в противен случай е тип дърво. В йерархията класовете играят ролята на възли, а унаследяванията – на връзки. Нивата на тази йерархия се наричат слоеве или слоеве на абстракция (нива на абстракция).
Line 30 ⟶ 26:
== Видове класове ==
Има много различни категории класове; все пак тези категории не са задължително разделени класове в отделни дялове.
=== Абстрактни и конкретни ===
В език, който поддържа възможност за наследяване, <b>абстрактен клас</b> или абстрактен основен клас, е този който не може да бъде инстанциран, защото е означен като абстрактен и
Повечето обектно ориентирани езици за програмиране позволяват на програмистите да уточняват кои класове се смятат за абстрактни и няма да позволят на такива да бъдат инстанцирани. Например в [[Java]] и [[PHP]], ключовата дума abstract (абстрактен) се използва. В [[C++|C++]], абстрактен клас е такъв имащ поне един абстрактен метод зададен чрез съответния синтаксис в езика (чиста виртуална функция в C++ езика).
Line 58 ⟶ 53:
''Ненаследим'' клас се декларира с sealed в C# или final в Java.
Пример: В Java класът String е дефиниран като final.
''Ненаследимите'' класове
=== Частични ===
Line 77 ⟶ 73:
=== Неинстантни ===
''Неинстантните'' класове позволяват на програмистите да групират полета и методи, които да са достъпни по време на изпълнение без нуждата да се създават инстанции на тези класове. Всъщност създаването на инстанции от тези класове е изцяло забранено.
Пример: в ''C#'', клас обозначен със ''
=== Безименни / анонимни ===
Line 83 ⟶ 80:
== Ползи ==
Компютърните програми обикновено представят модел на реалния свят или някакъв абстрактен свят (например ''домейн''). Понеже всеки клас моделира отделна концепция, употребата на класове позволява по естествен начин да се моделира заобикалящият ни свят. Всеки клас в модела може да се разглежда като съществително, методите на този клас
Класовете ускоряват разработката на програми, като намаляват повторението на идентичен код, улесняват тестовете и отстраняването на грешки. Ако един клас е щателно тестван и е доказано чист от грешки (бъгове), то употребата му ще подобри качеството на крайния код за разлика от употребата на прясно написан код или код сглобен по copy/paste модела. Освен това ефективното преизползване на класове означава, че ако е допусната грешка, то ще трябва да се редактира само един клас, а не няколко различни сегмента от кода.
|