Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие КНЕУ.doc
Скачиваний:
24
Добавлен:
07.03.2016
Размер:
3.9 Mб
Скачать

7.8. Вкладені типи

У класі можна визначати типи даних, внутрішні по відношенню до класу. Так визначаються допоміжні типи, які використовуються класом, що тільки містить їх. Механізм вкладених типів дозволяє приховати непотрібні деталі і більш повно реалізувати принцип інкапсуляції. Безпосередній доступ ззовні до такого класу неможливий (мається на увазі доступ по імені без уточнення). Для вкладених типів можна використовувати ті ж специфікатори, що і для полів класу.

Наприклад, введемо в наш клас Monster допоміжний клас Gun. Об'єкти цього класу без “господаря” даремні, тому його можна визначити як внутрішній:

using System;

namespace ConsoleApplication1

{

class Monster

{

class Gun

{

}

}

}

7.9. Рекомендації по програмуванню

Як правило, клас як тип, визначений користувачем, повинен містити приховані (private) поля і наступні функціональні елементи:

  • конструктори, що визначають, як ініціалізувати об'єкти класу;

  • набір методів і властивостей, що реалізовують характеристики класу;

  • класи виключень, використовувані для повідомлень про помилки шляхом генерації виняткових ситуацій.

Класи, що моделюють математичні або фізичні поняття, зазвичай так само містять набір операцій, що дозволяють копіювати, привласнювати, порівнювати об'єкти і проводити з ними інші дії, потрібні по суті класу.

Перевантажені операції класу повинні мати інтуїтивно зрозумілий загальноприйнятий сенс (наприклад, не слід примушувати операцію + виконувати що-небудь, окрім складання або додавання). Якщо яка-небудь операція перевантажена, слід перенавантажувати і аналогічні операції, наприклад + і ++ (компілятор цього автоматично не зробить). При цьому операції повинні мати ту ж семантику, що і їх стандартні аналоги.

У переважній більшості класів для реалізації дій з об'єктами класу переважно використовувати не операції, а методи, оскільки їм можна дати осмислені імена.

Перевантажені методи, на відміну від операцій, застосовуються в класах завжди - як мінімум, використовується набір перевантажених конструкторів для створення об'єктів різними способами.

Методи із змінним числом параметрів реалізуються менш ефективно, чим звичайні, тому якщо, наприклад, потрібно передавати в метод два, три або чотири параметри, можливо, виявиться ефективнішим реалізувати не один метод з параметром раrams, а три перевантажені варіанти із звичайними параметрами.

Розділ 8. Ієрархії класів

Управляти великою кількістю розрізнених класів досить складно. З цією проблемою можна справитися шляхом об'єднання загальних для декількох класів властивостей в одному класі, і використовувати його як базовий.

Цю можливість надає механізм спадкоємства, який є щонайпотужнішим інструментом ООП. Він дозволяє будувати ієрархії, в яких класи-нащадки набувають властивостей класів-предків і можуть доповнювати їх або змінювати. Таким чином, спадкоємство забезпечує важливу можливість багатократного використання коду. Написавши і відлагодивши код базового класу, можна, не змінюючи його, за рахунок спадкоємства пристосувати клас для роботи в різних ситуаціях. Це економить час розробки і підвищує надійність програм.

Класи, розташовані ближче до початку ієрархії, об'єднують в собі загальні риси для всіх класів, що розташовані нижче. У міру просування вниз за ієрархією класів набувають все більше конкретних особливостей.

Отже, спадкоємство застосовується для наступних взаємозв'язаних цілей:

– виключення з програми фрагментів коду, що повторюються;

– спрощення модифікації програми;

– спрощення створення нових програм на основі тих, що існують.

Крім того, спадкоємство є єдиною можливістю використовувати об'єкти, початковий код яких недоступний, але в яких потрібно внести зміни.