Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
100587_Lytvyn.doc
Скачиваний:
164
Добавлен:
07.02.2016
Размер:
6.01 Mб
Скачать

5.1.1. Класифікація й об’єктно-орієнтовне проектування

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

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

Не дивно, що класифікація торкається багатьох аспектів об’єк­тно-орієнтовного проектування. Вона допомагає визначити ієрархії узагальнення, спеціалізації й агрегації. Знайшовши загальні форми взаємодії об’єктів, ми вводимо механізми, які стануть фундаментом реа­лізації нашого проекту. Класифікація допомагає правильно визна­чити модульну структуру. Можемо розташувати об’єкти в одному або різних модулях, залежно від ступеня подібності об’єктів; зчеплення й з’єднання – лише міри цієї подібності.

Класифікація дуже важлива для розподілу процесів між про­цесорами. Скеровуємо процеси на один процесор або на різні залежно від того, як ці процеси зв’язані один з одним.

5.1.2. Труднощі класифікації

Приклади класифікації. Об’єктом є щось таке, що має чіткі межі. Насправді – це не зовсім так. Межі предметів часто невизначені. Наприклад, подивіться на ногу. Спробуйте визначити, де починається й закінчується коліно. У розмовній мові важко зрозуміти, чому саме ці звуки означають слово, а не є частиною якогось довшого слова. Уявіть собі, що проектуєте текстовий редактор. Що вважати класом – літери чи слова? Як розуміти окремі фрази, речення, параграфи, документи? Як звертатися з довільними, не обов’язково осмисленими, блоками тексту? Що робити з реченнями, абзацами й цілими документами – чи відповідають такі класи нашій задачі?

Розумна класифікація – складна проблема. Оскільки є паралелі з ана­логічними труднощами в об’єктно-орієнтовному проектуванні, роз­гля­немо приклади класифікації у двох інших наукових дисциплінах: біології та хімії.

Аж до XVIII століття ідея про можливість класифікації живих організмів за ступенем складності була переважальною. Ступінь склад­ності був суб’єктивним, тому не дивно, що людина виявилася у списку на першому місці. У середині XVIII століття шведський ботанік Карл Лінней запропонував досконалішу таксономію для класифікації організмів: він увів поняття родів і виду. Через століття Дарвін запропонував теорію, згідно з якою механізмом еволюції є природний добір і наявні види тварин – продукт еволюції давніх організмів. Тео­рія Дарвіна ґрунтувалася на розумній класифікації видів. Натуралісти намагаються розташувати види, роди, сімейства в кожному класі в тому, що називається натуральною системою. Під цією системою деякі автори розуміють деяку просту схему, що дає змогу об’єднати най­подібніші живі організми в один клас і різні – у різні класи. У сучасній біології термін “класифікація” означає встановлення ієрархічної сис­теми категорій на основі природних зв’язків між організмами. Най­загальніше поняття в біологічній таксономії – царство, потім, в по­рядку спадання загальності: тип (відділ), клас, загін (порядок), сі­мейство, рід і, нарешті, вид. Місце кожного організму в ієрархічній системі визначається на підставі зовнішньої та внутрішньої будови тіла й еволюційних зв’язків. У сучасній класифікації живих істот ви­діляють групи організмів, які мають загальну генетичну історію, тобто організми, що мають подібні ДНК, входять в одну групу. Класи­фікація за ДНК корисна, бо дає змогу виділити відрізнити організми, які схожі зовні, але генетично дуже відрізняються. Згідно з сучасними поглядами, дельфіни більше схожі до корови, ніж до форелі.

Можливо, для програміста біологія здається зрілою, цілком сфор­мованою наукою з певними критеріями класифікації організмів. Однак ми навіть не знаємо порядок кількості видів рослин і тварин, що населяють нашу планету: класифіковано менш ніж 2 млн. видів, тоді як можливу кількість видів передбачено від 5 до 50 млн. Понад це, різні критерії класифікації тих самих тварин приводять до різних ре­зультатів. Все залежить від того, що ви хочете одержати. Якщо ви хочете, щоб класифікація свідчила про споріднення видів, ви одержите одну відповідь, якщо ви бажаєте відобразити рівень пристосування, від­повідь буде іншою. Можна зробити висновок, що навіть у строгих наукових дисциплінах методи і критерії класифікації дуже залежать від мети класифікації.

Аналогічна ситуація склалася й у хімії. У давні часи вважалося, що всі речовини – це комбінація землі, повітря, вогню й води. У се­редині XVII в. Роберт Бойль запропонував елементи як примітивні хімічні абстракції, з яких складаються складніші речовини. Через століття 1789 року Лавуазьє опублікував перший список, що містив 23 елементи, хоча згодом встановлено, що деякі з них такими не є. Але відкриття нових елементів тривало, список збільшувався. Нарешті, 1869 року Менделєєв запропонував періодичний закон, що давав точні критерії для класифікації відомих елементів і навіть міг пророкувати властивості ще не відкритих елементів. Але навіть періодичний закон не був кінцем історії про класифікацію елементів. На початку XX ст. відкриті елементи з однаковими хімічними властивостями, але з різними атомними вагами – ізотопи.

Висновок простий. Як стверджував Декарт: “Відкриття поряд- ку – нелегке завдання, але якщо він знайдений, зрозуміти його зовсім не важко”. Кращі програмістські рішення виглядають просто, але, як по­казує досвід, домогтися простої архітектури дуже складно.

Ітераційна суть класифікації. Всі ці відомості ми подали тут не для того, щоб виправдати довгий процес побудови програмного забезпечення, хоча насправді багатьом менеджерам і користувачам здається, що необхідно століття, щоб закінчити розпочату роботу. Ми лише хотіли підкреслити, що розумна класифікація – робота інтелек­туальна, і кращий спосіб її введення – послідовний, ітеративний про­цес. Це стає очевидним під час аналізу розроблення таких програмних продуктів, як графічний інтерфейс, стандарти баз даних і мови програмування четвертого покоління. У розробленні програмного за­безпечення розвиток якої-небудь абстракції часто наслідує загальну схему. На початку проблема вирішується ad hoc, тобто як-небудь, для кожного часткового випадку. З нагромадженням досвіду деякі рішення виявляються вдалішими, ніж інші, і виникають роди фольклору, що пе­ре­ходять від людини до людини. Вдалі рішення вивчають систе­матичніше, їх програмують й аналізують. Це дає змогу розвити моделі, здійснити їх автоматичну реалізацію, і розробити теорію, що уза­гальнює знайдене рішення. Це, своєю чергою, піднімає практику на ви­щий рівень і уможливлює виникнення ще складніших завдань, до яких, знову ж таки, ми підходимо ad hoc, починаючи новий виток спіралі.

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

Чому ж класифікація така складна? Ми пояснюємо це двома при­чинами. По-перше, відсутністю “ідеальної” класифікації, хоча, природно, одні класифікації кращі від інших. Існує стільки способів розподілу світу на об’єктні системи, скільки вчених візьметься за цю задачу. Будь-яка класифікація залежить від погляду суб’єкта. Розгля­немо приклад: Об’єднане Королівство... економісти можуть розглядати як економічний інститут, соціологи – як суспільство, захисники довкілля – як куточок природи, американські туристи – як визначну пам’ятку, найромантичніші з нас – як зелені поля. По-друге, розумна класифікація вимагає неабиякого творчого підходу. Іноді відповідь очевидна, іноді – це справа смаку, а буває, що все залежить від уміння помітити головне. Все це нагадує загадку: “Чому лазерний промінь схожий на золоту рибку?.. Тому, що ні він, ні рибка не вміють свистіти”. Треба бути дуже творчим мислителем, щоб знайти спільне в настільки не пов’язаних предметах.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]