ООП головного мозга
От: licedey  
Дата: 19.09.11 19:12
Оценка:
Я хотел бы спросить. Вот поступает задача. У меня как у фрилансера это часто, на месяц неделю итд.
Ну я стараюсь разбить ее на классы, объекты сначала. Но эта внутренняя красивость не дает нужного результата в релизе. Скажите как вы делаете задание с нуля. Главное ведь чтоб работало? А это "эстетствующее" никак с ним не вяжется. Кому интересно что там внутри.
Re: ООП головного мозга
От: DorfDepp  
Дата: 19.09.11 19:50
Оценка:
Просто беру и делаю, стараясь делать качественно, насколько это возможно, не слишком увлекаясь.

Делать просто хорошо не намного дольше, чем делать кое-как.

Вот потом уже рано или поздно нужно будет остановиться, посмотреть на то, что получилось и устроить хороший еврорефакторинг. В вашем случае это когда-нибудь придется делать тому, кто будет поддерживать ваш продукт, иначе лопнет. Но с вашими короткими проектами эта проблема вашей не станет.

Вывод — делайте просто хорошо.
Re: ООП головного мозга
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.09.11 20:54
Оценка: 1 (1) +2
Здравствуйте, licedey, Вы писали:

L>Я хотел бы спросить. Вот поступает задача. У меня как у фрилансера это часто, на месяц неделю итд.

L>Ну я стараюсь разбить ее на классы, объекты сначала. Но эта внутренняя красивость не дает нужного результата в релизе. Скажите как вы делаете задание с нуля. Главное ведь чтоб работало? А это "эстетствующее" никак с ним не вяжется. Кому интересно что там внутри.

Дык разбивать на классы, функции и т.п. нужно не ради причастности к модному движению, а для того чтобы код было легко развивать и поддерживать.

По сему классы нужно вводить только когда другие пути дают худший результат. В прочем, есть задачи которые классами описываются лучше. Это задачи симуляции, т.е. когда нужно построить некоторую модель, "запустить" ее и наблюдать за тем как она себя поведет под воздействием входных данных. Но таких задач не так уж и много. И зачастую ООП-ом начинают решать задачи ему не свойственные. Вот это и есть ООП головного мозга.

Чтобы такого не случалось нужно кроме ООП познать и другие парадигмы. Как минимум имеет смысл освоить ФП, МП/DSL.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: ООП головного мозга
От: Sorc17 Россия  
Дата: 19.09.11 21:04
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Чтобы такого не случалось нужно кроме ООП познать и другие парадигмы. Как минимум имеет смысл освоить ФП, МП/DSL.


Посоветуйте, что почитать, чтобы асилить этот МП/DSL? Желательно "для чайников", ибо раньше никогда не пробовал
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re: ООП головного мозга
От: abibok  
Дата: 19.09.11 21:35
Оценка: -1
L>Главное ведь чтоб работало? А это "эстетствующее" никак с ним не вяжется. Кому интересно что там внутри.

Вы так говорите как будто запрограммировать в не-ООП стиле получится быстрее. Это то же самое что говорить что без юнит-тестов получится быстрее.
Re[2]: ООП головного мозга
От: Lloyd Россия  
Дата: 19.09.11 21:38
Оценка: +6
Здравствуйте, abibok, Вы писали:

A>Вы так говорите как будто запрограммировать в не-ООП стиле получится быстрее. Это то же самое что говорить что без юнит-тестов получится быстрее.


Задачу на неделю для фриланса?! Конечно быстрее.
Re[3]: ООП головного мозга
От: abibok  
Дата: 19.09.11 21:55
Оценка:
L>Задачу на неделю для фриланса?! Конечно быстрее.

Что именно — первое или второе? По поводу второго еще можно поспорить, а с первым-то как? Вы давно писали что-нибудь в не-ООП стиле? Мне пришлось бы заставлять писать себя так, и это было бы явно медленнее, не говоря уже об отладке и сопровождении.
Re: ООП головного мозга
От: мыщъх США http://nezumi-lab.org
Дата: 19.09.11 22:31
Оценка:
Здравствуйте, licedey, Вы писали:

L>Я хотел бы спросить. Вот поступает задача. У меня как у фрилансера это часто, на месяц неделю итд.

L>Ну я стараюсь разбить ее на классы, объекты сначала. Но эта внутренняя красивость
смотря, что за задача. кстати, а чем класс от объекта отличается? и чем они вместе отличаются от модулей?

> не дает нужного результата в релизе. Скажите как вы делаете задание с нуля.

смотрю, какие сущности и какой функционал мне потребуется для решения. и начинаю реализовывать это отдельными модулями, максимально абстрагированными друг от друга, а потом свожу их воедино. но это _сильно_ зависит от задачи. создание "с нуля" подразумевет, что этого еще никто не делал (или делал, но недоделал) и потому сначала нужно провести ресерч. потом заточить прототип. вы сочинения в школе тоже начисто сразу писали? или нет? наверное черкали, резали, а потом выбрасывали, меняли местами и склеивали. так и в программировании. начисто с нуля ничего не делается.

> Главное ведь чтоб работало? А это "эстетствующее" никак с ним не вяжется. Кому интересно что там внутри.

зависит от того кому это поддерживать
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[4]: ООП головного мозга
От: Lloyd Россия  
Дата: 19.09.11 23:22
Оценка: +2 -2
Здравствуйте, abibok, Вы писали:

L>>Задачу на неделю для фриланса?! Конечно быстрее.


A>Что именно — первое или второе? По поводу второго еще можно поспорить, а с первым-то как? Вы давно писали что-нибудь в не-ООП стиле? Мне пришлось бы заставлять писать себя так, и это было бы явно медленнее, не говоря уже об отладке и сопровождении.


А вы уверены, что вы вообще хоть когда нибудь писали в ООП-стиле?

Вот я чем дольше работаю, тем меньше вижу ентое ООП.
Более того, очень многими неглупыми людьми ставится под сомнение его полезность. Все народ от того же насквозь оопшного DDD плюется, а вот вполне из себя процедурный anemic model вызывает массу положительных эмоций.
Re[5]: ООП головного мозга
От: мыщъх США http://nezumi-lab.org
Дата: 20.09.11 01:08
Оценка: 16 (3) +1 -1
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, abibok, Вы писали:


L>>>Задачу на неделю для фриланса?! Конечно быстрее.


A>>Что именно — первое или второе? По поводу второго еще можно поспорить, а с первым-то как? Вы давно писали что-нибудь в не-ООП стиле? Мне пришлось бы заставлять писать себя так, и это было бы явно медленнее, не говоря уже об отладке и сопровождении.


L>А вы уверены, что вы вообще хоть когда нибудь писали в ООП-стиле?


полностью поддерживаю. многие языки (не плюсы) имеют ооп чисто для галочки. и ведь живут. к тому же, если мы в плюсах создадим класс "сортировка" (с кучей разных алгосов сортировки), то это будет не ооп, а модульное программирование, потому что "сортировка" это не сущность. это действие, выполняемое над некоторыми сущностями (массивами, списками...). загнать разные методы сортировки в один класс можно, но что мы получим в результате? обыкновенный модуль, но не объект.

и потом, если взять два достаточно крупных проекта -- например, Spider Monkey (си) и Google V8 (плюсы), то в первом легко разобраться и с ходу начать дотачивать код под свои нужды. нужно прикрутить логгер -- берем и прикручиваем. а теперь смотрим на приплюснутый код. вообще-то он не совсем приплюснутый. он даже хуже. половина движка java script написана на спец-реализации самого java-script и взаимодействует с приплюснутым кодом очень нетривиальными путями. просто воткнуть fopen/fprintf не получается. и приходится в одном месте создавать новый интерфейс, а в другом месте его юзать. причем данные имеют жутко сложную структуру. итераторы всякие везде... да еще и с разными типами... хосподи. записать аргументы функции в файл -- это кошмар на улице вязов.

L> Более того, очень многими неглупыми людьми ставится под сомнение его полезность.

про все ооп не скажу, но вот никак не могу понять -- действительно ли язык программирования должен быть таким сложным, как плюсы? действительно ли у программиста должна болеть голова за виртуальные деструкторы? говорят, что плюсы обеспечивают высокую производительность. и где же она? куча программ на жабе не сильно уступает аналогичным программам на плюсах. хваленный сверхбыстрый движок гугла написан не только на плюсах, но и на жаба скрипте, причем там такие критические фрагменты кода, как, например, операции с массивами. вероятно, на этот шаг пошли по соображениям безопасности. чтобы память не текла и буфера нежиданно не переполнялись.

вот я и думаю -- а что мне дадут плюсы, если их выучить? питон мне дал высокую продуктивность и учить его не пришлось (так, полистал книжку на выходных), java script дала высокую портабельность (работает _везде_, включая мобилки и опять без затрат на обучение), чистый си дает производительность, но нам нем пишутся только самые низкоуровневые компоненты, а обвязка -- жаба, питон, руби или скала.

у плюсов же -- производительность только в теории, на практике оно тормозит и отжирает память (если, конечно, пользоваться приплюснутыми фичами на полную). программы сложно писать и еще сложнее понимать. с компиляторами и платформами сплошная чехарда. даже плагин для популярных программ обычно нужно писать на том компиляторе, которым собиралась сама программа.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[3]: ООП головного мозга
От: Vaako Украина  
Дата: 20.09.11 07:22
Оценка:
Здравствуйте, Sorc17, Вы писали:

S>Здравствуйте, VladD2, Вы писали:


VD>>Чтобы такого не случалось нужно кроме ООП познать и другие парадигмы. Как минимум имеет смысл освоить ФП, МП/DSL.


S>Посоветуйте, что почитать, чтобы асилить этот МП/DSL? Желательно "для чайников", ибо раньше никогда не пробовал


Внутренние языки, специфичные для предметной области:
здесь
Re[5]: ООП головного мозга
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 20.09.11 08:52
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Более того, очень многими неглупыми людьми ставится под сомнение его полезность. Все народ от того же насквозь оопшного DDD плюется, а вот вполне из себя процедурный anemic model вызывает массу положительных эмоций.


Почему это анемик процедурный ? Если смтореть про инкапсуляцию как у Скота Мейерса, то ООПшность это именно переход от рич к анемик.
Re[6]: ООП головного мозга
От: Lloyd Россия  
Дата: 20.09.11 08:55
Оценка: -2
Здравствуйте, Ikemefula, Вы писали:

L>>Более того, очень многими неглупыми людьми ставится под сомнение его полезность. Все народ от того же насквозь оопшного DDD плюется, а вот вполне из себя процедурный anemic model вызывает массу положительных эмоций.


I>Почему это анемик процедурный ?


Потому что имеем разнесение данных и способов работы с ними. Может "процедурный" и не самое удачное слово, но вот "ООП" уж тут точно ни в какие ворота.

I>Если смтореть про инкапсуляцию как у Скота Мейерса, то ООПшность это именно переход от рич к анемик.


Я не знаю, какая инкапсуляция у Мейерса.
Re[7]: ООП головного мозга
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 20.09.11 09:10
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>>>Более того, очень многими неглупыми людьми ставится под сомнение его полезность. Все народ от того же насквозь оопшного DDD плюется, а вот вполне из себя процедурный anemic model вызывает массу положительных эмоций.


I>>Почему это анемик процедурный ?


L>Потому что имеем разнесение данных и способов работы с ними. Может "процедурный" и не самое удачное слово, но вот "ООП" уж тут точно ни в какие ворота.


ООП как раз никуда не девалось

I>>Если смтореть про инкапсуляцию как у Скота Мейерса, то ООПшность это именно переход от рич к анемик.


L>Я не знаю, какая инкапсуляция у Мейерса.


Как функции, не являющиеся методами, улучшают инкапсуляцию
Re: ООП головного мозга
От: Son of Northern Darkness  
Дата: 20.09.11 09:13
Оценка:
Здравствуйте, licedey, Вы писали:

L>Я хотел бы спросить. Вот поступает задача. У меня как у фрилансера это часто, на месяц неделю итд.

L>Ну я стараюсь разбить ее на классы, объекты сначала. Но эта внутренняя красивость не дает нужного результата в релизе. Скажите как вы делаете задание с нуля. Главное ведь чтоб работало? А это "эстетствующее" никак с ним не вяжется. Кому интересно что там внутри.

ООП — это инструмент управления структурной сложностью. Если программа простая, с коротким циклом поддержки (пофиксил баги и забыл), то на красивый дизайн можно забить. Конечному пользователю все равно что внутри, заказчику тоже пока корявость кода не бьет ему по карману стоимостью поддержки и модификации.
Re[8]: ООП головного мозга
От: Lloyd Россия  
Дата: 20.09.11 09:19
Оценка: +1 -2
Здравствуйте, Ikemefula, Вы писали:

I>>>Почему это анемик процедурный ?


L>>Потому что имеем разнесение данных и способов работы с ними. Может "процедурный" и не самое удачное слово, но вот "ООП" уж тут точно ни в какие ворота.


I>ООП как раз никуда не девалось


У вас видимо свое понимание о том, что такое ООП, отличное от распространненной трактовки:

Object-oriented programming (OOP) is a programming paradigm using "objects" – data structures consisting of data fields and methods together with their interactions – to design applications and computer programs.


А вот собственно отличие от процедурного программирования:

The most important distinction is whereas procedural programming uses procedures to operate on data structures, object-oriented programming bundles the two together so an "object", which is an instance of a class, operates on its "own" data structure.

Вы все еще уверены, что anemic — это ООП?
Re[6]: ООП головного мозга
От: Sorc17 Россия  
Дата: 20.09.11 09:32
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>то это будет не ооп, а модульное программирование, потому что "сортировка" это не сущность. это действие


Сущность может быть и действием и ещё много чем. Есть в ООП такая штука, как различные типы классов (я в литературе встречал название "типы объектов", но мне оно кажется не правильным). Какие-то классы описывают предметы, другие — действия, ... Их там 4 типа, оп-моему. Надо спросить у хорошо подкованных в теории ООП, они должны знать
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
Re[9]: ООП головного мозга
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 20.09.11 10:01
Оценка: +2
Здравствуйте, Lloyd, Вы писали:

I>>ООП как раз никуда не девалось


L>У вас видимо свое понимание о том, что такое ООП, отличное от распространненной трактовки:

L>

L>Object-oriented programming (OOP) is a programming paradigm using "objects" – data structures consisting of data fields and methods together with their interactions – to design applications and computer programs.


Это слишком общая формулировка. Разве здесь сказано, что "все структуры данных должны иметь хотя бы один метод для работы с этими данными" ?

L>А вот собственно отличие от процедурного программирования:

L>

L>The most important distinction is whereas procedural programming uses procedures to operate on data structures, object-oriented programming bundles the two together so an "object", which is an instance of a class, operates on its "own" data structure.


И это слишком общая формулировка. Ты их из википедии что ли надёргал ? Класс спокойно может выполнять операции над своими членами, каждый из которых м.б. простой структурой данных.

L>Вы все еще уверены, что anemic — это ООП?


Вот пример про анемик из соседнего форум. Есть бизнес сущность Account, необходимо сделать трансфер средств из одного на второй.
var rep = new AccountRepository(Application.Db);
var account1 = rep.LookUpFor(id_1);
var account2 = rep.LookUpFor(id_2);
var svc = new TransferService(account1, account2, Application.CurrencyRates);

svc.Transfer(100,Currency.USD);


Ты хочешь сказать, что если класс Account это простая структура вообще без всяких методов, то код выше перестаёт быть ООП ?

Для сравнения, рич
var rep = new AccountRepository(Application.Db);
var account1 = rep.LookUpFor(id_1);
var account2 = rep.LookUpFor(id_2);

account1.TransferTo(account2, 100, Currency.USD); // опаньки, нарушение инкапсуляции


Здесь Account наделили методами и стало ООП ? Всего то изменились классы и обязанности и теперь класс придется модифицировать по любому поводу.
Re[10]: ООП головного мозга
От: Lloyd Россия  
Дата: 20.09.11 10:11
Оценка: +2 -6
Здравствуйте, Ikemefula, Вы писали:

I>>>ООП как раз никуда не девалось


L>>У вас видимо свое понимание о том, что такое ООП, отличное от распространненной трактовки:

L>>

L>>Object-oriented programming (OOP) is a programming paradigm using "objects" – data structures consisting of data fields and methods together with their interactions – to design applications and computer programs.


I>Это слишком общая формулировка. Разве здесь сказано, что "все структуры данных должны иметь хотя бы один метод для работы с этими данными" ?


Конечно общая. ООП — это вообще довольно мутное понятие.

L>>А вот собственно отличие от процедурного программирования:

L>>

L>>The most important distinction is whereas procedural programming uses procedures to operate on data structures, object-oriented programming bundles the two together so an "object", which is an instance of a class, operates on its "own" data structure.


I>И это слишком общая формулировка. Ты их из википедии что ли надёргал ? Класс спокойно может выполнять операции над своими членами, каждый из которых м.б. простой структурой данных.


И что?

L>>Вы все еще уверены, что anemic — это ООП?


I>Вот пример про анемик из соседнего форум. Есть бизнес сущность Account, необходимо сделать трансфер средств из одного на второй.

I>
I>var rep = new AccountRepository(Application.Db);
I>var account1 = rep.LookUpFor(id_1);
I>var account2 = rep.LookUpFor(id_2);
I>var svc = new TransferService(account1, account2, Application.CurrencyRates);

I>svc.Transfer(100,Currency.USD);
I>


I>Ты хочешь сказать, что если класс Account это простая структура вообще без всяких методов, то код выше перестаёт быть ООП ?


Надо было больше смайликов добавить, было бы убедительнее.

I>Для сравнения, рич

I>
I>var rep = new AccountRepository(Application.Db);
I>var account1 = rep.LookUpFor(id_1);
I>var account2 = rep.LookUpFor(id_2);

I>account1.TransferTo(account2, 100, Currency.USD); // опаньки, нарушение инкапсуляции
I>


I>Здесь Account наделили методами и стало ООП ? Всего то изменились классы и обязанности и теперь класс придется модифицировать по любому поводу.


Да, именно. Стало более в ОО-духе.
Re: ООП головного мозга
От: -VaS- Россия vaskir.blogspot.com
Дата: 20.09.11 10:59
Оценка:
L>Я хотел бы спросить. Вот поступает задача. У меня как у фрилансера это часто, на месяц неделю итд.
L>Ну я стараюсь разбить ее на классы, объекты сначала. Но эта внутренняя красивость не дает нужного результата в релизе. Скажите как вы делаете задание с нуля. Главное ведь чтоб работало? А это "эстетствующее" никак с ним не вяжется. Кому интересно что там внутри.

Критерий простой — если программа будет в дальнейшем модифицироваться (изменение и уточнение требований в будущем, либо банальная инкрементальная разработка), то без нормальной архитектуры и хороших тестов это сделать будет невозможно.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.