Page 36 - 4836
P. 36

Методи,  як  правило,  коротші  від  процедур,  оскільки
                            вони  здійснюють  тільки  одну  операцію  над  даними,  зате  їх
                            набагато більше. У коротких методах легше розібратися, але
                            вони  незручні  тим,  що  код  для  обробки  повідомлення  іноді
                            "розмазаний" по багатьох маленьких методах.
                                   Інкапсуляцією  даних  не  слід  зловживати. Чим  більше
                            логіки та даних приховано в надрах класу, тим складніше його
                            розширювати.  Відправною  точкою  тут  має  бути  не  те,  що
                            клієнтам не дозволяється знати про тих чи інших даних, а те,
                            що клієнтам для роботи з класом цих даних знати не потрібно.
                                   Багато хто вважає, що ООП є неефективним. Як же ж
                            насправді?  Ми  повинні  проводити  чітку  грань  між
                            неефективністю  на  етапі  виконання,  неефективністю  у  сенсі
                            розподілу  пам'яті  і  неефективністю,  пов'язаної  із  зайвою
                            універсалізацією.
                                  1. Неефективність  на  етапі  виконання.  У  мовах  типу
                            Smalltalk  повідомлення  інтерпретуються  під  час  виконання
                            програми  шляхом  здійснення  їх  пошуку  в  одній  або  кількох
                            таблицях і в результаті вибору відповідного методу. Звичайно,
                            це  повільний  процес.  І  навіть  при  використанні  найкращих
                            методів  оптимізації  Smalltalk-програми  в  десять  разів
                            повільніше оптимізованих C-програм.
                                  У гібридних мовах типу Oberon-2, Object Pascal і C + +
                            відправка  повідомлення  призводить  лише  до  виклику  через
                            покажчик  процедурної  змінної.  На  деяких  машинах
                            повідомлення  виконуються  лише  на  10  %  повільніше,  ніж
                            звичайні  процедурні  виклики.  І  оскільки  повідомлення
                            бувають  у  програмі  набагато  рідше  за  інших  операцій,  їх
                            вплив на час виконання впливу практично не робить.
                                  Однак  існує  інший  фактор,  який  впливає  на  час
                            виконання:  інкапсуляція  даних.  Рекомендується  не  надавати
                            прямий доступ до полів класу, а виконувати кожну операцію
                            над  даними  через  методи.  Така  схема  приводить  до
                            необхідності виконання процедурного виклику кожен раз при




                                                           34
   31   32   33   34   35   36   37   38   39   40   41