У єдиному блозі розробників, який я прочитав, тим хлопцем Joel-On-Software-засновником-SO, я давно прочитав, що ОО не призводить до підвищення продуктивності. Автоматичне управління пам’яттю робить. Класно. Хто може спростувати дані?
Я все ще вважаю, що OO - це не-OO, що програмування з функціями - це програмування всього вбудованого.
(І я повинен знати, як я почав з GWBasic.) Коли ви рефакторний код використовуєте функції,
variable2654
стає
variable3
методом, який ви використовуєте. Або ще краще, це ім'я, яке ви можете зрозуміти,
і якщо функція коротка , це називається,
value
і цього достатньо для повного розуміння.
Коли код без функцій стає кодом з методами, ви можете видалити милі коду.
Коли ви реорганізовувати код , щоб бути дійсно OO, b
, c
, q
, і Z
стати this
, this
, this
і this
. А оскільки я не вірю у використання this
ключового слова, ви можете видалити милі коду. Насправді ви це можете зробити, навіть якщо використовуєте this
.
Я не думаю, що ОО є природною метафорою.
Я також не вважаю, що мова є природною метафорою, і я не вважаю, що "запахи" Фоулера є кращими, ніж сказати "цей код неприємний". Це означає, що я думаю, що ОО - це не про природні метафори, а люди, які думають, що
предмети просто вискакують у вас, в основному не вистачають сенсу.
Ви визначаєте об'єкт всесвіту, і кращі всесвіти об'єктів призводять до коротшого коду, простіше зрозуміти, працює краще, або всі ці (і деякі критерії я забуваю). Я думаю, що людям, які використовують природні об'єкти клієнтів / доменів як об’єкти програмування, не вистачає сили для переосмислення Всесвіту.
Наприклад, коли ви робите систему бронювання авіакомпаній, те, що ви називаєте бронюванням, може взагалі не відповідати юридичному / діловому бронюванню.
Деякі основні поняття - це справді класні інструменти
Я думаю, що більшість людей перебільшують цілу річ "коли у тебе молоток, вони всі цвяхи". Я думаю, що інша сторона монети / дзеркала є такою ж правдою: коли у вас є такий пристрій, як поліморфізм / успадкування, ви починаєте знаходити використання там, де воно підходить, як рукавичка / шкарпетка / контакт-лінза. Інструменти ОО дуже потужні. Однозначне успадкування, я думаю, абсолютно необхідне, щоб люди не захоплювалися, моє власне
програмне забезпечення для багатонаспадкування не витримує.
У чому сенс ООП?
Я думаю, що це прекрасний спосіб обробляти абсолютно масову кодову базу. Я думаю, що це дозволяє вам організувати та реорганізувати код і надає вам мову для цього (за винятком мови програмування, в якій ви працюєте), а також модулює код досить природним та зрозумілим способом.
Більшість розробників OOP призначено неправильно зрозуміти
Це тому, що це процес відкриття очей, як життя: ви все більше розумієте ОО з досвідом, і починаєте уникати певних зразків та використовувати інших, коли стаєте мудрішими. Одним з найкращих прикладів є те, що ви припиняєте використовувати успадкування для класів, якими ви не керуєте, і віддаєте перевагу схемі «
Фасад» .
Щодо вашого міні-есе / питання
Я хотів зазначити, що ти маєш рацію. Повторне використання - це мрія здебільшого. Ось цитата Андерса Хейльсберга на цю тему (блискуча) звідси :
Якщо ви попросите початківців програмістів написати календарний контроль, вони часто думають собі: "О, я буду писати найкращий у світі контроль календаря! Це буде поліморфно щодо типу календаря. У ньому будуть дисплеї, і глушники, і це, те, і інше ». Їм потрібно відправити календарну заявку за два місяці. Вони ставлять всю цю інфраструктуру на місце контролю, а потім витрачають два дні на написання шаленої програми календаря поверх неї. Вони подумають: "У наступній версії програми я збираюся зробити набагато більше".
Як тільки вони починають замислюватися над тим, як вони насправді збираються реалізувати всі ці інші конкретизації свого абстрактного дизайну, однак виявляється, що їх дизайн абсолютно неправильний. А тепер вони намалювали їх у кут, і вони повинні викинути всю справу. Я це бачив знову і знову. Я сильно вірую в те, щоб бути мінімалізмом. Якщо ви насправді не збираєтеся вирішити загальну проблему, не намагайтеся створити рамку для вирішення конкретної проблеми, оскільки ви не знаєте, як має виглядати цей фреймворк.