Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Приховування даних в об’єктахСодержание книги
Поиск на нашем сайте
Одним з найважливіших принципів ООП є те, що програміст при розробці програми повинен думати про коди і дані одночасно. Вони не повинні існувати окремо. Дані керують потоком коду, а код керує структурою і значеннями даних. Якщо код і дані є розділеними елементами, то завжди існує небезпека виклику правильної процедури з неправильними даними чи помилкової процедури з правильними даними. Контроль за правильністю виклику покладається на програміста. Pascal не проводить подібної перевірки, окрім перевірки типів. Об’єктний тип здійснює синхронізацію коду і даних шляхом спільної побудови їх описів. За правилами хорошого стилю програмування, доступ до полів об’єкта здійснюється лише через методи, що працюють з даними полями. Щоб одержати значення одного з полів об’єкта, необхідно викликати відповідний метод, який повертає значення потрібного поля. Щоб присвоїти полю значення, теж необхідно викликати метод, який призначить даному полю нове значення. Інколи при використанні об’єктів всередині модулів можуть зустрічатися частини описів об’єктів, які експортувати небажано, наприклад, в комерційних застосунках. Необхідно передбачити об’єкти, методи яких доступні, але безпосередній доступ до даних об’єкта заборонений. В Pascal-і з цією метою використовуються приховані (приватні) поля і методи. Приховані поля і методи доступні тільки всередині того модуля, в якому описаний об’єкт. Інші частини такого об’єкту можна експортувати, але поля і методи, описані як приховані, були б недоступними. Поля і методи, які записані безпосередньо після заголовку об’єктного типу чи директиви PUBLIC, не мають ніяких обмежень на область дій. На відміну від них, поля і методи, оголошені після директиви PRIVATE, вважаються приватними (прихованими) і обмежені використанням в межах модуля. Повний опис об’єкту буде виглядати так: TYPE NewObject=OBJECT(батьківський) поля; [загальнодоступні]; методи; [загальнодоступні]; PRIVATE поля; [приватні]; методи; [приватні]; PUBLIC поля; [загальнодоступні]; методи; [загальнодоступні]; END;
Інкапсуляція Об’єднання в об’єкті коду та даних називається інкапсуляцією. При роботі з об’єктами необхідно створювати достатню кількість методів, які б забезпечували роботу з усіма полями даних, щоб не виникала необхідність звертатися до них безпосередньо. При цьому не обов’язково використовувати директиву PRIVATE, достатньо створити стільки методів, скільки необхідно для роботи з полями об’єкта. Довизначимо наші об’єкти TStudent і TStudent1 так, щоб передбачити всеможливі операції з ними у вигляді методів. Type TStudent=OBJECT Name:String[30]; Date:String[10]; Rate:Real; Procedure Init(Nm,Dt:String; R t:Real); Function GetName:String; Function Get Date:String; Function Get Rate: Real; Procedure ShowName; Procedure ShowDate; Procedure ShowRate; END;
TStudent1=OBJECT(TStudent) Bal:Real; Procedure Init(Nm,Dt:String; R t,Bl:Real); Function Get Bal: Real; Function Get Sum: Real; Procedure ShowBal; Procedure ShowAll; END; Методи ShowName, ShowDate, ShowRate і ShowBal виводять прізвище, дату народження, розмір стипендії і середній бал відповідно. Метод Get Sum використовує Bal для розрахунку суми стипедії від середнього балу. Метод ShowAll виводить значення всіх полів одночасно. Для екземпляру St1 типу TStudent 1 можна використовувати набір методів для непрямої роботи з полями даних, наприклад: WITH St1 DO BEGIN Init(‘Ляшук С.Т. ’,’10.02.1995’,700,4.5); ShowAll; END; Доступ до полів об’єкту здійснюється лише методами цього об’єкту. Таке правило є не обов’язковим, а рекомендаційним. Перевизначення методів При використанні стандартних методів Pascal-ю дуже важко або й зовсім неможливо створювати гнучкі процедури, які б працювали з формальними параметрами змінних типів, як це робить, наприклад, процедура writeln, що може виводити на екран дані типу string, real, integer, boolean і споріднені з ними. Ця проблема вирішується об’єктно-орієнтованим програмуванням за допомогою механізму успадковування: якщо визначений породжений тип, то методи батьківського типу успадковуються, однак при бажанні вони можуть перевизначатися. Для перевизначення успадкованого типу просто описується новий метод з тим же іменем, що і успадкований метод, але з іншим тілом, а у випадку потреби – і з новою множиною параметрів. Пояснимо цей процес на прикладі. Попередньо ми створили два об’єктні типи: Type TStudent=OBJECT Name:String[30]; Date:String[10]; Rate:Real; Procedure Init(Nm,Dt:String; R t:Real); Function GetName:String; Function Get Date:String; Function Get Rate: Real; Procedure ShowName; Procedure ShowDate; Procedure ShowRate; END;
TStudent1=OBJECT(TStudent) Bal:Real; Procedure Init(Nm,Dt:String; R t,Bl:Real); Function Get Bal: Real; Function Get Sum: Real; Procedure ShowBal; Procedure ShowAll; END;
Дочірній тип успадковує від батьківського процедуру Init. Але, оскільки цей дочірній тип має додаткове поле даних Bal, яке батьківською процедурою Init не визначається, то цю процедуру необхідно перевизначити. Зробимо це так: PROCEDURE TStudent1.Init(Nm,Dt:string;rt,bl:real); Begin TStudent.Init (Nm,Dt,Rt); Bal:=bl; End; Зверніть увагу, що ми використовуємо метод ініціалізації об’єкту TStudent. Синтаксис виклику успадкованого методу такий: Предок.Метод; де Предок – ідентифікатор батьківського типу, а Метод – ідентифікатор методу цього типу. Відзначимо також, що перевизначати можна тільки методи, але в жодному випадку не поля даних.
Підсумок Виходячи з уже створеного об’єктного типу, можна створювати новий тип, який успадкує поля даних і методи від батьківського типу. Такий механізм називається успадковуванням, а новий об’єкт по відношенні до раніше створеного – дочірнім. На основі цього дочірнього типу теж можна створювати новий об’єкт, для всіх них перший об’єкт буде прабатьківський. По відношенню до екземплярів об’єктів можна виконувати операцію присвоєння. Згідно із загальним правилом, змінна зліва має належати до батьківського типу, справа – до дочірнього, або ж обидві змінні повинні належати до того самого об’єктного типу. Об’єднання в об’єкті коду та даних називається інкапсуляцією. При створенні об’єктів слід намагатися визначити їх так, щоб доступ до полів даних виконувався власними типами цих об’єктів. При потребі, у дочірньому типі можна перевизначити метод оатьківського об’єкта. Поля даних перевизначати не можна.
Питання по темі 1. Вибрати правильний запис, який би реалізував механізм успадковування а) TStudent1=OBJECT:TStudent Bal:Real; END; б) TStudent1=OBJECT(TStudent) Bal:Real; END; в) TStudent1=OBJECT() TStudent+Bal:Real; END; 2. Нехай змінні a і b - об’єктного типу, причому a – дочірнього, b – батьківського. Який із записів правильний: а) a:=b; б) b:=a; в) Обидві операції коректні 3. Яка директива вказує, що поля і методи, записані після неї, можуть використовуватися тільки в межах модуля? а)PRIVATE б)PUBLIC в)CONSTRUCTOR 4. Як називається об’єднання в об’єкті коду та даних 5. Якщо метод дочірного об’єкту має ту ж назву, що й метод батьківського об’єкту, але інше тіло чи параметри, то цей метод називається
|
||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 53; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.202.60 (0.006 с.) |