Процедурний код проти коду OOP


19

Я закінчив проект на PHP з 13000+ рядків у процедурному стилі [тому, що мені це дуже добре знайоме, хоча я знаю OOP], і проект працює ідеально.

Але чи варто перетворити його на OOP? [ тому що світ зайнятий OOP ]

Мій код не потребує жодної функції OOP [інкапсуляція, наслідування в основному ...]!

То що мені робити?

І яку допомогу я отримаю, якщо перетворять її на OOP?


21
Будь ласка, повідомляйте нас про необхідність змінити цей проект. Було б цікаво дізнатися, чи раді ви, що прийняли це рішення, чи пошкодуєте.
JeffO

2
Вам потрібна інкапсуляція. ОО - це один із способів отримати його; можливо, у вас є інший, який працює для вас, але так чи інакше вам потрібно контролювати кодові залежності.
Марцін

Як щодо анекдоту для вас: кілька років тому я працював над веб-додатком середнього розміру, написаним здебільшого на JavaScript (не питайте). Стиль кодування був значною мірою процедурним. Коли проект наближався до завершення, я був незадоволений тим, як написаний код та переписав значну частину його в OOP-JavaScript. Це спричинило затримку в виконанні проекту, і згодом ми виконали відносно невелике обслуговування проекту. Мені завжди було цікаво, чи все це кодування вартувало зусиль ;-)
Пандінкус

так, це було того варте тримати відкриті двері багаторазового використання завжди варто.
Chani

1
Питання: чи очікуєте ви подальшого розвитку? Процедурне програмування - це найпростіший і найшвидший підхід, коли ви точно знаєте, що вам потрібно, і це не зміниться. Будь-яка зміна процесуального кодексу буде болем, в OOP це було б набагато простіше.
Каміль Томшик

Відповіді:


52

Мій код не потребує жодної функції OOP

Ви відповіли на власне запитання - якщо в такому випадку вам не потрібен OOP, а ваш проект працює, не перетворюйте його.

Однак слід поглянути на використання OOP для наступного проекту - але тільки якщо це доречно.

У процедурному програмуванні немає нічого поганого - доки він використовується у відповідному місці.


2
+1 згоден: "Ви повинні поглянути на використання OOP для наступного проекту".
Кері Чоу

11
+1 так, якщо вона працює правильно, не виправляйте.
сетзамора

4
Я б сказав, якщо він працює коректно зараз, не змінюйте його, але ви ніколи не знаєте, яким буде наступний запит на функцію.
JeffO

7
"вам слід поглянути на використання OOP для наступного проекту", але не використовувати його, якщо це не має сенсу. Деякі речі краще писати процедурно, деякі краще підходять для ООП. Використовуйте все, що підходить.
TMN

@TMN - це мається на увазі - я повинен зробити це явним.
ChrisF

16

Ні, і не тільки тому, що вам не потрібен OOP.

Якщо ваша програма вже закінчена і працює задовільно, то більше 90% часу це витрачає час, щоб переписати готовий код з будь-якої причини.

OOP не все потужний. Є багато місць, де OOP не слід використовувати, тому не використовуйте його лише тому, що OOP - це тенденція.


1
Під "готовим кодом" ви маєте на увазі, що він працює?
JeffO

@eff О так сер! це ідеально :)
Сурав

Він сказав, що закінчив проект, і він іде ідеально. Для мене це означає, що він або готовий доставити замовнику, або був доставлений замовнику, вважаючи, що він є. Я закінчив, я маю на увазі перевірений і готовий до доставки, звичайно, якщо з’являються основні помилки, перезапис може вступити в гру.
Скайт

Будь ласка, детальніше розкажіть про "безліч місць, де OOP не слід використовувати".
Сокіл

3
@Falcon, незалежно від того, наскільки добре розроблений ваш код OOP, але якщо сам проблемний домен погано відображений на модель OO, ваш дизайн OOP повинен бути шаленим. Є безліч проблемних доменів, які ніколи не повинні виражатися через OOP .
SK-логіка

8

Моє загальне перейняття парадигм (і чому жодна з трьох основних парадигм не є правильним або неправильним способом програмування):

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

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

Програмування в функціональному стилі добре, коли потрібен сильний відрив механізму від політики. Приємна модель - функція механізму, яка приймає функцію політики. (Я дізнався про це, переглянувши модуль std.algorithm мови програмування D.) Відведення стану , що змінюється, на межі між кодом політики та механізму, як правило, робить API простішим. Якщо стан, що змінюється, використовується приватно в будь-якому, це детальна інформація про реалізацію. Іншою силою функціонального програмування є паралельність із зрозумілих причин.


Дякуємо за чудову відповідь, що описує кожен тип парадигми програмування та наводить приклади того, коли / як їх використовувати.
Кевін Пено

7

Код ніколи не потребує "OOP". Це програмісти, наскільки вони здатні думати в різних режимах, які передбачають, що та чи інша проблема "потребує" $ PARADIGM або найкраще вирішується таким чином.

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


5

Ви повинні конвертувати свій проект в OOP лише тоді, коли є чіткі вказівки на потребу OOP. Можливі сценарії, в яких це може статися, є (серед інших):

  • розширення масштабів проекту
  • додавання в команду більше розробників

і навіть у цих сценаріях конвертувати ваш проект в OOP все ще може не потрібно.


Хороший момент, але чи можете ви сказати мені, чому буде проблематично розробити проект або додати більше розробників у команду, якщо це процедурний код?
Сурав

Масштабування проекту може включати додавання складних реляційних структур до прикладної моделі, і в цьому випадку перехід на ООП може стати вигідним. Якщо додаток наростає трохи, і в кінцевому рахунку це стане простіше зрозуміти або зрозуміти в OOP, нові розробники можуть «наздогнати» швидше, якщо код є OOP. Залишити після себе спадщину коду, що не є OO, може виявитись проблемою пізніше, коли проект збільшуватиметься. ще один із тих випадків, коли «речі є такими, якими вони є, тому що вони стали таким чином»
Тимофій Гроот

3
саме це мені прийшло в голову, коли я читав питання. він каже, що написав 13 K рядків коду. Я сподіваюся, що це не буде витрачено даремно, використовуючи лише один раз. і якщо його доведеться повторно використовувати, то oop стане необхідним. інакше це стане кошмаром для нових розробників
Chani

4

Обидва можуть бути хорошими, обидва можуть бути поганими. Але переоблаштовувати одне на вигляд іншого ніколи не є хорошою ідеєю.


2

Якщо ви подумаєте, чому OO винайдено, ви побачите, що OOP взагалі не потрібен , але іноді це значно полегшує ваше життя.

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

Це дозволяє писати більші та більші програми, впевнено, що ви змінили свого величезного слона завдання на сто завдань розміром з мишами. Додатковий бонус полягає в тому, що ви можете взяти деякі з цих «мишей» і використовувати їх повторно в інших програмах!

Звичайно, реальний світ не зовсім такий, і повторне використання об'єктів ніколи не впадає у спосіб, який він задумав, але це не означає, що це марна парадигма.

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

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


0

Мій код не потребує жодної функції OOP [інкапсуляція, наслідування в основному ...]!

Як ви знаєте, що?

Чи потрібно підтримувати цей проект? Чи заплановані якісь нові функції? Будуть інші люди, які будуть розвиватися з вами? Ви повторили себе? Чи важко зрозуміти код?

Якщо відповідь "так", то, можливо, ви повинні почати думати про створення скелета ООП та йти цим шляхом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.