Големина на текста:
Цели на херметизацията
да скрие подробностите на реализацията (абстракция)
да обедини всички необходими физически и функционални характеристики, за да може обектът правилно да изпълнява предназначението
си, т. е. да съвместява данните на обекта с методите за тяхната обработка (свързаност)
да защити данните на обекта от несанкциониран достъп (надеждност)
Същността на херметизацията
Добре разработеният клас се стреми да инкапсулира цялото състояние и поведение, необходимо за изпълнение на задачите, за които се
разработва, като в същото време се стреми да скрие и защити колкото може повече детайли на вътрешното си устройство
Херметизацията отразява две представи за класа
от страна на интерфейса (характеристиките видими за различните външни потребители на класа/обекта) - обединява знанията за това какво
може да върши обектът
от страна на реализацията (характеристиките видими за самия него и неговите екземпляри) - обединява знанията за това как класът/обектът
осъществява своите задачи
Потребители на класа/достъп
компоненти от външната по отношение на класа среда (др. класове, обекти, структури, подпрограми, модули и т.н.) - достъп само до
необходимото за правилното използване на класа
самият клас - пълен достъп
класове-наследници - по-свободен достъп от външните потребители, но по-ограничен от самия клас
Нива на херметизация в ООЕП
общодостъпно, публично (public) ниво – определя достъп за всички възможни потребители на класа до характеристики, наричани открити,
общодостъпни или публични
защитено (protected) ниво – отнася се до характеристики, наречени защитени, които са достъпни за класа и неговите наследници
частно (private) ниво – отнася се до характеристиките, които са достъпни само за самия клас. Тези характеристики се наричат закрити или
частни
Реализация на херметизацията в ООЕП
Смолток всички физически характеристики на обекта са частни, т. е. забранен е достъпът до тях (те са достъпни само чрез методите на
класа), докато всички методи са общодостъпни
С++:
статичните данни са достъпни за всички екземпляри от класа, а не само за самия обект
“приятелски” функции и класове, които получават достъп до частните член-променливи и член-функции на класа щом са декларирани
като негови приятели (friend)
“закрито” наследяване
В Object Pascal може да се осигури достъп до компоненти на класа още на етапа на проектиране (разработване) на програмата. Такива
компоненти се наричат публикувани (published)
В Java трите изброени нива на херметизация са подчинени на още едно допълнително, наречено пакетен достъп. Пакетът представлява
конструкция обединяваща група класове, а пакетният достъп в Java е подразбиращият се
Херметизация и ОО проектиране
Препоръки при проектиране на състоянието:
Обикновено, за физическите характеристики - защитено ниво на достъп (улеснява достъпа до тях за наследниците на класа)
За физически характеристики, за които е необходимо да се осигури строг контрол при модификация - закрито ниво на достъп
За полета от данни, чиито първоначални стойности не трябва да бъдат променяни през целия им жизнен цикъл (const член-
променливи в С++) - в интерфейса на класа се включват само методи за четене на тези полета
Препоръки при проектиране на поведението:
обикновено функционалните характеристики са общодостъпни (public)
методи, които са с локално предназначение за класа - private
методи, които са с локално предназначение за класа или неговите наследници - protected
ако методът осъществява достъп до някои полета само за четене (read-only) - публичен достъп
Пример за проектиране на херметизацията
Развитие на проекта на класовете от примера за за сортиране на масиви с раз-личен тип на елементите: сортиране на масив от цели
числа или масив от за-писи (нормален шрифт private характеристиките, protected – с курсив, а public – с получерен)
Херметизация в С++
Капсулиране на обектите в C++ се постига чрез съчетаването на две езикови средства:
Прилагане на атрибутите за достъп (private, protected и public) в два различни смисъла (по отношение на два различни елемента от
декларацията на класа):
за контролиране на достъпа до членовете на класа и
за определяне на достъпа до членовете на класа-предшественик
Задаване на т.н. “приятели” на класа (friend), които могат да бъдат други класове или функции
Контролиране на достъпа до членовете на класа
Синтаксис:
<атрибут за достъп> : <декларации на членове на класа>;
Пример:
class BaseClass
{
public: int PublicFunc(); // public член
protected: int ProtectFunc(); // protected член
private: int PrivateFunc(); // private член
};
Семантика - private е достъпът по подразбиране:
АтрибутСмисъл
private
Членовете на класа, декларирани като private могат да бъдат използвани само от член-функции и приятели
(класове и функции) на класа
protected
Членовете на класа, декларирани като protected могат да бъдат използвани от член-функции и приятели
(класове и функции) на класа, както и от класове-наследници на този клас
publicЧленовете на класа, декларирани като public могат да бъдат използвани от всяка функция
Определяне на достъпа до членовете на класа-предшественик (начин на пораждане)
Синтаксис:
Class <име_клас>:<атрибут за достъп> <клас_предшеств.> {<тяло на класа>; };
Според начина на пораждане има три вида наследяване: публично (public), защитено (protected) и закрито наследяване (private)
Пример: Определяне на достъпа до членовете на класа-предшественик: семантика
Таблица за достъп до членовете на класа-наследник
в зависимост от определения за тях достъп в предшественика и начина на пораждане: При private пораждане горните правила се
отнасят само за членовете от предшественика, които не са static. public static членовете са достъпни в наследника чрез операцията за
област на действие
Приятелски класове и функции
Приятелските класове и функции (обикновени или членове на други класове) не са елементи на класа. Те са външни класове и
функции (вкл. main()), получили привилегирован достъп до private, protected и public членовете на класа, които са декларирани в него
или наследени
Пример за приятелска функция:
class Complex {
public:
Complex( float re, float im ) {real=re;imag=im;};
friend Complex CompSum( Complex first, Complex second );
void Print(){cout<<"re:"<<real<<" im:"<<imag<<endl;} ;
private:
float real, imag;
};
Complex CompSum( Complex first, Complex second ) {
return Complex( first.real + second.real,
first.imag + second.imag );
}
void main(){
Complex c1(1,1),c2(2,2);
CompSum(c1,c2).Print();
Приятелски класове и функции: Пример
Пример за приятелски клас:
// Пример за friend клас
class YourClass
{
friend class YourOtherClass; // Деклар. на friend клас
private:
int topSecret;
};
class YourOtherClass
{
public:
void change( YourClass yc );
};
void YourOtherClass::change( YourClass yc )
{
yc.topSecret++; // Има достъп до private данни
Правила при използване на приятелски класове и функции
Няма значение в коя част от декларацията на класа ще бъде поставена декларацията на “приятеската” връзка (най-често в началото)
Като приятел може да се декларира клас или функция, които не са декларирани все още (т.е. еквивалентно е на предварителна
декларация)
“Приятеските” връзки:
не се наследяват
не са транзитивни
не са комутативни (взаимни)
Членове-функции не могат да се декларират като friend преди да е направена пълната декларация на класа, на който принадлежат:
class ForwardDeclared; //Предварителна декларация на класа
class HasFriends
{
friend int ForwardDeclared::IsAFriend(); // Грешка!!!
};
Предимства на херметизацията
Програми с висока надеждност – защитата на характеристиките на обектите в съответствие с потребителския интерфейс от различно
ниво дава възможност да се определи границата на допустимите изменения и модификации върху класа и неговите екземпляри за
различните негови потребители
Разширяемост на обектите (а от там и на програмите) – комбинирането на херметизацията с модулност позволява развитие и
поддръжка на програмите в течение на години, чрез уточняване или промяна на свойствата на обектите от техните наследници,
дефинирани в други модули или програми
Ефективност при създаване на софтуерни продукти (многократно използване на програмния код) –създаване на
библиотеки от класове с общо предназначение, които са високо надеждни и могат да се използват в различни
конкретни приложения (напр. библиотеки за потребителски интерфейс – BP Turbo Vision, C++ MFC, Delphi VCL; за
контейнери на данни – Delphi SDL, C++ STL, Java JGL) и др.
Динамика на съществуването – реализация в ООП
В ООП тази страна на динамиката, която може да се нарече динамика на съществуването, е реализирана чрез
механизмите за създаване и инициализация на екземпляри на обекти
В ООЕП се използват два основни подхода за създаване на екземпляри – статичен и динамичен подход
Статичният (автоматичен) подход се осъществява чрез използване на статични променливи (обекти):
статичните обекти съществуват през цялото време на изпълнение на програмата или подпрограмата, в която са създадени
за тях се заделя памет при декларацията им в програмата или подпрограмата
заделянето на памет се основава на механизма на стека (stack)
отделената памет се освобождава (т. е. обектите се унищожават) при приключване на изпълнението на съответната
програмна част
програмистът не се грижи за заделяне и освобождаване на паметта
Динамичният подход за създаване на обекти-екземпляри се осъществява с използване на динамични променливи
(обекти)
динамичните обекти могат да се създават и унищожават във всеки момент от изпълнение на програмата
при динамичния подход (основан на механизма на динамичната памет – heap) памет за променливите се заделя и
освобождава по специално указание от потребителя
на динамичната променлива се съпоставя адрес от динамичната памет, където се разполага нейната стойност (тази връзка не
е постоянна и може да се променя по време на съществуването на променливата)
програмистът има грижата за създаване на динамични обекти (заделяне на памет) обикновено чрез специална операция New,
разбира се придружена още от операцията инициализация над новосъздадения екземпляр (чрез метод-конструктор напр.)
освобождаване на паметта, заета от динамичен обект в ООЕП:
Java, Смолток – извършва се автоматично чрез т. нар. механизъм “изхвърляне на боклука”
BP, C++ – е грижа на програмиста, при което основна роля играе специален метод на обекта (деструктор)
във всички ООЕП работата с динамични екземпляри се осъществява чрез използване на указатели (Смолток и Java –
неявно;C ++ и Object Pascal – явно)
Предимства на ООП в следствие от възможността за създаване на динамични обекти
Адекватност при моделиране на реални системи – във всеки момент да се създават точно необходимите по брой
и тип обекти; контролира се времето на тяхното съществуване
Икономия на памет – ненужните обекти могат да се унищожават във всеки момент от функционирането на
системата, с което се освобождава памет за нови обекти
Проблеми при реализацията на динамиката на съществуване на обектите, произтичащи от възможността за
наследяване
Проблем 1: Резервиране на памет за обекти
отделяне на минимално количество статична памет – за екземпляра се резервира толкова памет (на принципа на стека),
колкото е необходимо, за да се съхрани обект от неговия тип, без да се имат предвид неговите наследници. Такъв подход е
предвиден в езиците C++, BP, Object Pascal
отделяне на максимално количество статична памет – когато се срещне обект от конкретен тип се резервира максималното
количество памет, необходимa за да се съхрани стойност от типа на обекта или на произволен негов наследник (не се
използва в никой от ЕП поради принципно заложеното в него разхищение на памет)
отделяне на динамична памет

Това е само предварителен преглед

За да разгледате всички страници от този документ натиснете тук.

Цели на херметизацията

Да скрие подробностите на реализацията (абстракция). Да обедини всички необходими физически и функционални характеристики, за да може обектът правилно да изпълнява предназначението си, т. е. Да съвместява данните на обекта с методите за тяхната...
Изпратен от:
grems
на 2011-06-08
Добавен в:
Общи материали
по Програмиране
Статистика:
7 сваляния
виж още
 
Подобни материали
 

Приятелски Функции в C++

11 апр 2006
·
216
·
6
·
487
·
29

Функции, които имат достъп до всички компоненти на класа така, както и член-функциите на класа.Декларацията на приятелската ф-я може да се нам. както в частта public, така и в частта private и се х-ра с ключовата дума friend.
 

Логически функции - същност, описание, свойства и други

09 апр 2006
·
827
·
11
·
1,670
·
472
·
1

Логически функции - основни свойства (аксиоми) в Булевата алгебра, минимализация на логически функции и на непълно определени логически функции, преобразуване на логически функции чрез теоремата на Де Морган и др.
 

Прeдефиниране на операции

11 апр 2006
·
93
·
7
·
499

Механизмът на предефиниране дава възможност за интерпретация на класовете като нови типове данни. Ако a и b са два обекта от даден клас, то предефинирането на операция + позволява а+b да има смисъл. Операцията може да се предефинира, ако в нея участва...
 

Методи на клас

27 май 2006
·
91
·
3
·
304
·
6
·
1

Какво е това метод? Това са функции, присъстващи в един клас. Във VB.NET има просто функции, и функции, правещи нещо с променливите на класа и едновременно с това принадлежащи на класа. Именно вторите се наричат методи на клас.
 

Статични член-данни и статични член-функции. Масиви от обекти

11 апр 2006
·
120
·
4
·
305
·
18

Памет за статична член-данна се заделя винаги, дори и без да е създаден обект. Памет се заделя еднократно при задължителното им дефиниране след декларацията на класа. Обектите от даден клас ползват обща статична член-данна.
 
Онлайн тестове по Програмиране
Програмиране и използване на компютрите
междинен тест по Програмиране за Неучащи от 1 клас
Тестът се състои от 21 въпроса върху кратка история на компютрите. Всички въпроси са затворени и изискват един верен отговор.
(Лесен)
21
11
1
3 мин
12.11.2014
Тест по програмиране за 3-ти курс върху PHP
тематичен тест по Програмиране за Студенти от 3 курс
Това е първият тест по Програмиране в среда интернет за трети курс на специалност КТИД. Съдържа 24 задачи - всяка от тях само с по един верен отговор.
(Труден)
24
12
1
4 мин
14.11.2013
» виж всички онлайн тестове по програмиране

Цели на херметизацията

Материал № 701045, от 08 юни 2011
Свален: 7 пъти
Прегледан: 9 пъти
Предмет: Програмиране, Информатика, ИТ
Тип: Общ материал
Брой страници: 17
Брой думи: 820
Брой символи: 4,962

Потърси помощ за своята домашна:

Имаш домашна за "Цели на херметизацията "?
Намери бързо решение, с помощтта на потребители на Pomagalo.com:

Намери частен учител

Виторио Белоречки
преподава по Програмиране
в град София
с опит от  4 години
179 22

Николай Ненков
преподава по Програмиране
в град София
с опит от  6 години
343 55

виж още преподаватели...
Последно видяха материала
Сродни търсения