Page 37 - 4836
P. 37

доступі до даних. Однак якщо інкапсуляція використовується
                            тільки там, де вона необхідна (тобто в тих випадках, коли це
                            стає перевагою), то уповільнення цілком прийнятне.
                                  2. Неефективність у сенсі розподілу пам'яті. Динамічне
                            зв'язування і перевірка типу на етапі виконання вимагають по
                            ходу  роботи  інформації  про  тип  об'єкта.  Така  інформація
                            зберігається в дескрипторі типу і він виділяється один на клас.
                            Кожен  об'єкт  має  невидимий  покажчик  на  дескриптор  типу
                            для  свого  класу.  Таким  чином,  в  об'єктно-орієнтованих
                            програмах необхідна додаткова пам'ять виявляється в одному
                            покажчику для об'єкта і в одному дескрипторі типу для класу.
                                  3. Зайва  універсальність.  Неефективність  також  може
                            означати, що в програмі реалізовані надлишкові можливості.
                            У бібліотечному класі часто міститься більше методів, ніж це
                            реально необхідно. А оскільки зайві методи не можуть бути
                            вилучені,  вони  стають  мертвим  вантажем.  Це  не  впливає  на
                            час виконання, але позначається на розмірі коду.
                                   Одне  з  можливих  рішень  -  будувати  базовий  клас  з
                            мінімальним числом методів, а потім вже реалізовувати різні
                            розширення      цього    класу,    які   дозволять    наростити
                            функціональність.  Інший  підхід  -  дати  компонувальнику
                            можливість  видаляти  зайві  методи.  Такі  інтелектуальні
                            компонувальники вже існують для різних мов та операційних
                            систем.
                                   Але  не  можна  стверджувати,  що  ООП  неефективне.
                            Якщо  класи  використовують  лише  там,  де  це  дійсно
                            необхідно,  то  втрата  ефективності  через  підвищені  витрати
                            пам'яті  і  меншу  продуктивності  незначна.  Крім  того,
                            надійність  програмного  забезпечення  і  швидкість  його
                            написання часто буває важливіша, ніж продуктивність.








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