Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
підручник Менеджмент знань.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
6 Mб
Скачать

5.3. Ключові абстракції й механізми

5.3.1. Ключові абстракції

Пошук і вибір ключових абстракцій. Ключова абстракція — це клас або об'єкт, що входить у словник ПО. Найголовніша цінність ключових абстракцій полягає в тому, що вони визначають межі нашої проблеми: виділяють те, що входить у нашу систему й тому важливе для нас, і усувають зайве. Завдання виділення таких абстракцій специфічні для предметної області. Правильний вибір об'єктів залежить від призначення ІС і ступеня детальності опрацювання інформації.

Як ми вже відзначали, визначення ключових абстракцій містить у собі два процеси: відкриття й винахід. Ми відкриваємо абстракції, слухаючи фахівців із ПО: якщо експерт про неї говорить, то ця абстракція дійсно важлива. Винаходячи, ми створюємо нові класи і об'єкти, які не обов'язково є частиною предметної області, але корисні під час проектування або реалізації системи. Наприклад, користувач банкомату говорить "рахунок, зняти, покласти"; ці терміни — частина словника предметної області. Розробник системи використовує їх, але додає свої, такі як база даних, диспетчер екрану, список, черга і таке інше. Ці ключові абстракції створені вже не предметною областю, а проектуванням.

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

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

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

Важко відразу розташувати класи й об'єкти на певних рівнях абстракції. Іноді, знайшовши важливий клас, ми можемо пересунути його нагору в ієрархії класів, тим самим збільшуючи ступінь повторності використання коду. Це називається просуванням класу. Аналогічно, можемо дійти висновку, що клас занадто узагальнений, і це ускладнює успадкування: відбувається семантичний розрив або конфлікт зернистості. В обох випадках ми намагаємося виявити зчеплення або недостатню зв’язність абстракцій і зм'якшити конфлікт.

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

Існують такі правила:

  • об'єкти варто називати іменниками: theSensor або shape;

  • класи варто називати узагальненими іменниками: Sensors, Shapes;

  • операції-модифікатори варто називати активними дієсловами: Draw, moveLeft;

  • операції-селектори повинні містити запит або форму дієслова "to be": extentOf, isOpen;

  • підкреслення й використання великих літер — на ваш розсуд, постарайтеся лише не суперечити самі собі.