Що б ви зробили, якби ваш клієнт вимагав від вас не використовувати об'єктно-орієнтоване програмування?


31

Я пишу програму для імітації активності мурах у сітці (PDF). Мураш може пересуватися, збирати речі і кидати речі.

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

Щоб було зрозуміло, оригінальні слова від клієнта - це "не клас", але не "функціональне програмування". Тож я припускаю, що він не означає функціонального програмування, і я можу це зробити обов'язково. Крім того, я не маю попереднього досвіду функціонального програмування.

Однак я вважаю, що корисно зосередитись на цьому питанні, зокрема, на вимозі функціонального програмування, а не просто "робити це обов'язково".

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


9
Одне, що може змінити його думку, це, якщо вартість вас робить це вище (якщо ви володієте мовами OO, ніж функціональна мова програмування).
Холгер

Можливо, буде цікаво порівняти код імітації мурашок Річака Хікі ( gist.github.com/1093917 ) - в Clojure настільки функціональний, хоча симуляція була розроблена в основному для демонстрації використання STM.
mikera

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

6
Просто хочу переконатися, що ви побачили точку N3dst4, що "функціональне програмування" - це певна дисципліна програмування. Програмування, яке не є об'єктно орієнтованим, зазвичай описується як "процедурне програмування".
DJClayworth

1
Чому ви вважаєте, що об'єктно-орієнтована реалізація була б "набагато чистішою"? Швидше за все, це буде набагато менш читабельним, ніж правильне функціональне рішення.
SK-логіка

Відповіді:


201

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


83
+1 за "ви можете просто дізнатися те, чого ви не очікували"!
Кеннет

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

8
+1 за "ви можете просто навчитися чогось, чого ви не очікували!", АЛЕ якщо ОП не має великого досвіду функціонального програмування, і клієнт очікує хорошого і дешевого рішення, було б досить ризиковано зануритися в новий спосіб вирішення проблем.
mort

3
@mort - Клієнт у такому випадку хоче чогось особливого, звучить так, що він знає достатньо, щоб насправді знати, чого хоче, тому якщо людина, яку вони найняли, не може це зробити, то це їхня проблема. Я думаю, що я говорю, це той факт, що клієнт хоче чогось "хорошого і дешевого", і кажуть, що він найняв неправильну людину, яка не може цього забезпечити, це вина клієнта, а не вина автора, він не знає, як забезпечити дешеве і хороше функціональне програмування рішення цієї проблеми. Один із тих, кого варто автору намагатися надати того, що хоче клієнт, оскільки немає технічних причин не робити цього.
Рамхаунд

2
Ніде в запитанні ОП не сказала слів "добре і дешево". Бажання могло бути "Швидким і добрим" (з трьох: швидкий, хороший, дешевий). Все це не має значення, без настанов щодо ОП, оскільки "Технічні характеристики" кажуть "Використовувати функціональне програмування".
WernerCD

68

Ви згадуєте, що клієнт раніше програмував на функціональній мові, можливо, у нього є причина, що він вимагає від вас написати код у функціональному стилі. Ви повинні запитати його, чому .

Можливо, він має намір зберегти код і зберегти його пізніше.

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

Я б запитав його, чому він хоче код у функціональному стилі, і якщо час не такий вже й великий, я б попросив кілька додаткових днів, щоб набрати швидкість з функціональним програмуванням. (ура для отримання зарплати за навчання!)

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


@downvoter Ви б дали відгуки?
Танос Папатанасіу

3
Я розумію, що позначення tl; dr варте зниження, для деяких
Незалежне

1
Чи є що-небудь на сторінках поширених запитань або довідкових запитів, де закликає використовувати "tl; dr"? Або це просто негідні користувачі, яким це не подобається? Мені здається, що додавання стислого резюме відповіді може бути лише хорошою справою, тому я не можу уявити, чому це вважатиметься вагомим результатом.
Бен Лі

1
@Bratch Я думав, що tl; dr notation призначений для того, щоб користувач намагався прочитати мою відповідь. Це означає, що навіть якщо пропустити все інше, якщо ви просто прочитали це, то отримаєте суть відповіді. Що ви маєте на увазі з тим, що говорите?
Танос Папафанасьоу

1
SOME з нас, старих людей, не мають поняття, що означає; dr означає (я його шукав, але навіщо хтось використовувати такі
дурні

55

Чи знаєте ви, що функціональне програмування не означає просто "програмування без класів"?

Дивіться статтю Вікіпедії про це для повного schtick, але коротше ...

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

Функціональне програмування - це парадигма програмування, як і OO - парадигма програмування.

Якщо ваш фон знаходиться в ОО, то я бачу, як ви хочете, щоб усі ваші мурахи були об’єктами. З іншого боку, якщо ви імітуєте мурашину ферму з мільйонами мурашок, ОО та передача повідомлень можуть стати неефективними.

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

Функціональне програмування Python HOWTO


+1 для розміщення цього питання. Це дійсно слід уточнити у питанні.
Братч

Чи знали ви, що у вас можуть бути мови, які є як OO, так і функціональними? Це два організуючих принципи, які фактично значною мірою є ортогональними один для одного. Справді, багато мов ОО є також структурованими імперативними мовами, але немає теоретичної основи для того, щоб сильно поєднати їх.
Дональні стипендіати

@DonalFellows Абсолютно, це добре, що вони зовсім не є взаємовиключними. Python (оскільки питання спочатку було позначено Python) є імперативним, об'єктно-орієнтованим та функціональним, залежно від того, де ви стоїте, коли дивитесь на нього. І в інших місцях на цій сторінці хтось згадує OCaml, який є ОО та функціональним.
N3dst4

22

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


Погодьтеся. Це просто застосований здоровий глузд.
Містер Сміт

1
Проблема полягає в тому, що з точки зору бізнесу не завжди легко визнати клієнту свою нестачу знань («замість цього слід найняти когось, знайомого з функціональним програмуванням»). Простіше стверджувати, що OOP краще, просто тому, що ти з ним знайомий. Менш чесний , але простіше.
Андрес Ф.

@Andres F: Справа з новою мовою (і парадигмою) зовсім не проста. Незабаром чи пізніше клієнту доведеться переглянути проблему. Краще скоро, ніж пізніше.
Містер Сміт

4
@ Містер Сміт: Я повністю з вами згоден. Я просто кажу, що така чесність від постачальника (тобто програміста) не завжди буде. По суті, ви говорите клієнтові взяти на роботу когось іншого, що має все сенс у світі, але все-таки болісно.
Андрес Ф.

13

Існує поширена помилкова думка, що "ОО" повністю суперечить "функціональному". Ці речі можуть йти рука об руку. У вашому прикладі, я думаю, що "Мураха" може бути добре змодельований як абстрактний тип даних, який може бути реалізований прямо вперед за допомогою класів та об'єктів. Переходи між "мурашиними станами" можна закономірно моделювати за допомогою функцій, що приведе вас до функціонального підходу, оскільки ваш клас "Мураха" є незмінним типом.

І майте на увазі, що "об'єкти" можуть бути замінені функціональною концепцією закриття, оскільки об'єкти - це закриття бідної людини, об'єкти бідної людини - це ... ;-):

https://stackoverflow.com/questions/2497801/closures-are-poor-mans-objects-and-vice-versa-what-does-this-mean

https://stackoverflow.com/questions/501023/closures-and-objects


+1 Функціональне програмування та ООП - це ортогональні поняття. Подивіться на OCaml, Scala, Clojure, python для мов, які можуть працювати з обома.
rds

Ці два посилання коштують нагороди поодинці ...
Уейн Вернер

8

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

Виробляти "шалений код" тільки тому, що ви не погоджуєтесь, було б дуже непрофесійно.


8
  1. Чому всі ми припускаємо, що клієнт знає різницю між функціональним та імперативним програмуванням? Дуже багато людей не знають імен або специфіки парадигм програмування, що не входять в ООС, і легко замінять такі терміни, як "процедурна", "імперативна" та "функціональна".

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

  3. Якщо клієнт пише специфікацію, тоді реалізуйте специфікацію, інакше ви напишете специфікацію та реалізуєте свою специфікацію.

  4. Найкраща стратегія впливу на рішення клієнтів - це зробити небажаний варіант значно дорожчим. Це працює щоразу.

  5. Якщо ви є експертом (стосовно клієнта), то ви повинні мати можливість переконати їх.

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

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


+1 для "Чому ми всі припускаємо, що клієнт знає різницю між функціональним та імперативним програмуванням?". Клієнт може означати щось на кшталт "Я не хочу, щоб це було повторюваним, тому розбивайте все на функції", що є здоровим глуздом для розробників. Клієнт може не вважати, що це здоровий глузд, тому він вам каже.
AlexWebr

1
+1, насправді клієнт не має поняття, що таке функціональне програмування або керується останніми голосними словами, або тому, що вони зробили це двадцять років тому і досі вважають себе технічними.
Анонімний тип

5

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

Наприклад, багато людей могли розглянути

class C {
public:
  C();
  void f( int );
  void g();
};

бути класичним об'єктно-орієнтованим підходом, але

struct C;
void construct( C ** );
void f( C *obj, int arg);
void g( C *obj );

ні (навіть незважаючи на те, що обидва однаково об'єктно-орієнтовані, наскільки це стосується класичного "даних разом з функціями, які працюють на ньому").


2
Чому сперечаються про точний сенс ООП? Було б краще запитати, чому клієнт вважає, що його моделювання краще підходить для функціонального програмування. Клієнт може мати рацію ... Я серйозно сумніваюся, що під "функціональним" він мав на увазі ваш другий приклад C, або що він плутав "функціонал" з "імперативом".
Андрес Ф.

@Andres F .: Я не стверджував, що під функціональним він мав на увазі мій другий приклад C. Я просто вказував, що деякі люди вважають це OOP, а інші - ні. Тому перед тим, як розпочати аргументацію, було б добре уникати непорозумінь. Можливо, в першу чергу немає розбіжностей. Може бути, бос, оскільки він сказав, що він не знайомий з самим OOP, припускає, що OOP має певні властивості (подібно до того, як ОП, мабуть, передбачає, що функціональне програмування має певні властивості).
Фріріх Раабе

Строго, я б не вважав останній OOP, оскільки метод відправки виклику / повідомлення не направляється через об'єкт. Це ключова особливість OOP.
Стипендіати Доналу

5

Ви б спробували переконати свого клієнта, що використання об'єктно-орієнтованого програмування набагато чистіше?

Я думаю, що вам потрібно більше вчити себе парадигмам програмування. Об'єктно-орієнтований запрограмований код не обов'язково є чистішим, а насправді він не є універсальним. Крім того, хороший об'єктно-орієнтований кодер знає, як зробити хорошу роботу, використовуючи процедурну / модульну (З функціональними та деклараційними парадигмами це трохи складніше, але хорошому програмісту не повинно бути надто складно - через читання та відрахування - до прийнятного FP / декларативного рішення.)

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

Або ви б спробували дотримуватися того, що він вимагав, і дайте йому шалений код?

Якщо ви не можете написати гарний код процедурно, я сумніваюся, що ви можете написати хороший код об'єктно-орієнтованим способом. Період. Я не намагаюся судити тут, але це потрібно стверджувати.

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

Але всі ці питання не притаманні та унікальні для ОО. Вони існують у процедурному / модульному коді (та в інших парадигмах з цього приводу.) Це тип питань складності, який, по суті, не залежить від парадигми. Якщо ви не можете впоратися з ними без OO клею, то навряд чи ви зможете з цим впоратися.

=========

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

Інакше, можуть бути інші причини такої вимоги. Багато вбудованих магазинів, правильно чи неправильно, вирішують покласти чимало обмежень на те, що можна зробити з C ++ (наприклад, немає віртуальних методів, не є винятки.) Деколи це робиться у коліна. В інший час для цього є вагомі технічні причини.

Тому вам потрібно зрозуміти, чому клієнт хоче уникнути OO-коду. І якщо ви зможете припустити, що немає політичного порядку денного (немає червоних прапорів), тоді вам слід зробити професійну справу, яка полягає в тому, щоб просто зробити кодекс процедурно / модульно, і зробити це добре.

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


3

Ви змішуєте структури даних та об'єктно-орієнтоване програмування (звичайна плутанина в цьому зараженому OO світі)

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

Те, що простіше зробити в ОО, - це грубість

  • Спадщина на основі класу (легко створити новий клас, який видає себе за старий)
  • Поліморфізм на основі класу (легко додавати нові види мурашок до моделювання згодом)

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


Я додам, що будь-яка функціональна мова програмування з підтримкою поліморфізму повинна зробити досить легким написання об'єктно-орієнтованого або псевдо-об'єктно-орієнтованого стилю, що дозволяє легко додавати нові типи мурашок.
Марцін

@Marcin: правда, що сучасні мови FP досить потужні. Мені просто хотілося вказати на розбіжність між структурами даних / ADT та OO
hugomg

Але OO - це лише ADTs та об'єктно-керований метод відправки. Все інше будується на цьому. (Ну, часто єдиний контроль об'єктом над диспетчеризацією - за типом об'єкта, але це уточнення.)
Donal Fellows

3

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

(Це ще один приклад того, що соціальне питання помиляється з технічним / дизайнерським питанням.)

Тут є дві можливості:

  1. Ваш клієнт очікує, що зможе взяти написаний вами код та адаптувати його або підтримувати його сам після того, як ви закінчите його писати. Якщо так, то вам слід знати набагато більше про "стиль будинку" - функціонал проти ОО є лише вершиною айсберга. Вам або потрібно буде обмежитися стилем програмування, який розуміє ваш клієнт, або вам доведеться навчати свого клієнта в обраних вами стилях. (Одного разу мене попросили створити веб-додаток із CGI, не використовуючи шаблони чи бібліотеки, оскільки клієнт може захотіти внести зміни.)

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

Ви самі вирішите, в якій ситуації ви знаходитесь, і діяти відповідно.


3

Гм ... я єдиний, хто думає, що "це очевидно тестове завдання / завдання"? .

По-перше - сама задача має свого роду "академічний" характер (імітують аспект поведінки мурашок).

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

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

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

Якщо пояснення бракує, то всі ставки відключені .. Я не можу порекомендувати вам, що робити.

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

Головне - як тільки ви зрозумієте мотивацію, що стоїть за вимогами, правильний хід дій стає очевидним.

EDIT: Після перегляду діагоналі на посилається PDF, описані там алгоритми, безумовно, здаються більш підходящими для функціонального стилю, а не для OO


2

У їх запиті щодо використання функціонального програмування є кілька хороших аспектів:

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

Але є і деякі тривожні ознаки:

  1. Ви, здається, не готові реалізувати це у функціональному програмуванні. Ви вже трохи застаріли у своїх навичках і не можете йти в ногу зі змінами.
  2. Або клієнт очікує, що ти будеш кращим програмістом, ніж ти є насправді. Це означає, що вам може знадобитися знизити їх вимоги, поки ви не зможете це зробити належним чином.

-1 для неявного припущення, що ПП кращий за ООП.
Рассел Борогов

@ tp1 1) Ви припускаєте, що клієнт технічно розумніший за програміста, що не так, оскільки клієнт - це саме той клієнт. 2) FP старший, ніж OOP, і хоча він останнім часом отримує багато преси, з OOP нічого поганого, і вам не потрібно забувати використовувати FP 3) Гірше, що припустити, що FP краще і використовує FP робить вас кращим програмістом, це правда лише у кожному конкретному випадку, і в цьому випадку, здається, це неправда.
Джо Тайман

@Joe Tyman: Ну, має бути припущення, що люди не дурні, інакше клієнти зникають в одну мить. Я не намагався сказати, що oop - це погано чи гірше, але натомість, якщо вважати, що функціональність може бути необґрунтованою вимогою в цій ситуації - можливо, клієнт не знає навичок програмістів, або ще гірше, намагаючись змусити програмістів переключити свої технології.
tp1

@Joe Tyman: Крім того, найгірший сценарій, який я мав на увазі, полягав у тому, що клієнтам справді потрібні люди, які можуть виконувати якісь розширені функціональні програми, такі як теорія категорій, і вони намагаються знайти команду, яка може це зробити - ось чому запит для них це може бути необґрунтовано.
tp1

1

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

Погляньте на AI Challenge, який моделює деякі поведінки, детально описані тут у запитанні http://aichallenge.org, а потім подивіться на різноманітність початкових пакетів - http://aichallenge.org/starter_packages.php/ most це мови, які я б не розміщував у парадигмі ОО.


1

Ви нічого не писали про мову програмування, що, мабуть, є найважливішим. Різниця між OOP і функціональним програмуванням полягає не тільки в тому, як організовано код, але і самій мові. У випадку високої конкурентоспроможності використовується функціональна мова Erlang, яка має дуже високу перевагу перед, наприклад, Java (вона використовується, наприклад, в чаті Facebook). Рішення OOP може просто вийти з ладу через проблеми з продуктивністю.

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


0

Клієнт каже "стрибок", ваша відповідь: __ _ ?

Для мене я б спробував переконати, якщо це має сенс (новий проект), але у мене також є клієнт із 10-річним додатком VB6, який час від часу роблю оновлення ... не збираюся їх переконувати


технічно, хоча додаток VB6 добре, це майже OO, і якщо він працює нормально на поточній ОС, чому "оновити" до .NET. Це просто не має сенсу, якщо ви не хочете скористатися новою функціональністю.
Анонімний тип

Так, але ви намагалися використовувати vb6 останнім часом? боляче так;)
бумхауер

Так. Ми багато використовуємо його для підтримки існуючих додатків, які ще не отримали бюджет для оновлення до java чи .net. Це боляче (порівняно з сучасним IDE), але також відносно. Як і будь-яка мова (включаючи сценарії), коли ваше бажання в ній, ваше визначення болю стає набагато більш суб'єктивним.
Анонімний тип

0

Трохи перехресно вивчіть свого клієнта (безконфліктно):

Чи справді клієнт знає різницю між OOP та функціональним програмуванням? Чи законні проблеми / запити клієнта?

Якщо "Так": Якщо ви маєте кваліфікацію, робіть те, що вони хочуть, і беруть ваші гроші. Якщо ви не маєте кваліфікації, скажіть їм і нехай вони вирішать, що робити.

Інакше: привіт-хвіст це звідти!


0
double dist(Point p1, Point p2) 
{
  //return distance
}

Ця функція функціонує до тих пір, поки вона не читає / не записує нічого поза функцією. Якщо функція торкнулася змінної класу, вона більше не була б "функціональною". Перевагою функціонального стилю є те, що більше немає помилок із зміни або недійсного стану. Велика кількість функцій - це лише математичні формули. Це функціональне програмування в двох словах.

До речі, ви можете комбінувати функціональний стиль в рамках об'єктного або орієнтованого дизайну. Наприклад, дві змінні "Point" - це об'єкти зі станом. А функція все ще функціональна! Так !!

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