LINUX.ORG.RU
ФорумTalks

ООП. Иерархия геометрических фигур.

 ,


0

0

Итт мастера правильной™ ооп архитектуры рассказывают неучам-птушникам, как правильно сделать иерархию фигур Евклидовой геометрии. Для начала рассмотрим следующие фигуры: квадрат, прямоугольник, ромб, трапеция. Каждому нужно сделать класс, который будет, как минимум, будет иметь методы расчёта площади и пересечения с другой фигурой. Естественно, начальные требования могут и будут расширяться.

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

Положение хера на основные принципы ООП (инкапсуляция, полиморфизм, наследование), естественно, является признанием несостоятельности этого самого ООП, как целостной концепции.

Да начнётся срач! /дныньк/

★★★★★

Последнее исправление: alpha (всего исправлений: 1)

Нам @anonimous до сих пор круг не нарисовал. А ты про иерархию хочешь.

hateyoufeel ★★★★★
()

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

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от Shadow

Ты шо? ООП - это лучшая парадигма. Вон жабка - это ооп, а на жабке весь топовый ынтерпрайз софт пишут и программисты зарабатывают 400kk$/sec и работает она быстрее си. Ядро - тоже ооп, да вообще всё - это ооп.

crutch_master ★★★★★
() автор топика
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

ООП - это лучшая парадигма

Это кто вам такое сказал?

Парадигму надо выбирать, исходя из задачи, нет общего ответа.

fernandos ★★★
()
Ответ на: комментарий от fernandos

Слишком обобщаете, приставляйте слово «глупые».

Я не могу троллить настолько толсто. ОП и так на грани.

crutch_master ★★★★★
() автор топика

топик не для talks, а для development

ergo ★★★
()
Ответ на: комментарий от crutch_master

Это не троллинг, если человек заявляет что одна парадигма действительно является наилучшей для всего, то это глупость.

fernandos ★★★
()

А, классический solid никак? Там да, квадрат это вам не прямоугольник

upcFrost ★★★★★
()

как правильно сделать иерархию фигур Евклидовой геометрии

Зачем? Здесь нет иерархии, это ошибка новичка от ООП. Просто создаёшь интерфейс Shape и каждый его имплементирует.

foror ★★★★★
()

Слава ООП. Иерархия держит свой путь от «фигура»:

Фигура┬>квадрат
      ├>прямоугольник
      ├>ромб
      └>трапеция
byko3y ★★★★
()
Ответ на: комментарий от foror

Зачем? Здесь нет иерархии, это ошибка новичка от ООП.

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

Просто создаёшь интерфейс Shape и каждый его имплементирует.

Но тогда придётся копипастить весь код для похожих классов и выходит, что ооп ведет к copypast driven coding.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от BceM_IIpuBeT

Хероположение - это не спортивно.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Как будет реализовано вычисление пересечения фигур на плоскости?

А как еще можно вычислить? Либо универсальный метод, вроде «отрисовать маску», либо конкретные методы для всех пар фигур.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Либо универсальный метод, вроде «отрисовать маску»

Где он будет реализован, кто будет за него ответсвенен?

либо конкретные методы для всех пар фигур.

Где эти методы будут находится?

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Где он будет реализован

Внешне.

кто будет за него ответсвенен

Как вариант — использовать делегирование.

fernandos ★★★
()
Ответ на: комментарий от crutch_master

Ты считаешь, что авторы этих букварей - идиоты и ничерта не понимают в том, о чем пишут?

Да. С другой стороны, в то время, когда писали об ООП, все были идиотами. Но сегодня подобная иерархия это ошибка новичка.

Но тогда придётся копипастить весь код для похожих классов и выходит, что ооп ведет к copypast driven coding.

Что именно ты хочешь копипастить? Например?

foror ★★★★★
()
Ответ на: комментарий от byko3y

Естественно, начальные требования могут и будут расширяться

Подкласс выпуклые фигуры, подкласс прядущего подкласса четырёхугольники.

fernandos ★★★
()
Ответ на: комментарий от xmikex

Ну да.

Интерес в том, что квадрат является результатом смешивания ромба и прямоугольника, наследуя свойства (речь про геометрию) из них.

fernandos ★★★
()
Последнее исправление: fernandos (всего исправлений: 1)

квадрат, прямоугольник, ромб, трапеция

Каждому нужно сделать класс

Нет, не нужно. Нужен класс «точка», класс-контейнер «фигура» и билдеры которые делают нужные фигуры. Вот эти билдеры могут быть отдельными классами, если нужно.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Ахаха. Ладно, срач так срач. Единственное, что я смогу излить свой сок мозга только часов через несколько. У меня рабочий день сейчас, а тема серьезная.

Положение хера на основные принципы ООП (инкапсуляция, полиморфизм, наследование), естественно, является признанием несостоятельности этого самого ООП, как целостной концепции.

Для начала, это не принципы ООП. Это общие методы реализации ООП. А принципы ООП — это состояние, поведение и идентичность. Но я именно на этом заострять внимание не хочу, так как это всё всего лишь эпистемология, т.е. как мы определяем и структурируем само знание о предметной области (ООП, в данном случае). На конечный результат влияет совсем не это.

Проблемы у ООП начинаются тогда, когда его «принципы» рассматривают как догму. И заканчиваются тогда, когда его принципы перестают рассматривать как догму.

aist1 ★★★
()
Ответ на: комментарий от foror

Что именно ты хочешь копипастить? Например?

Вычисление площади треугольника и ромба. Второй - это 2 частных случая первого.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от TDrive

Опять?

Что бы не опять?

в прошлом треде

Прошлый тред скатился в обсуждение всего.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от fernandos

Что? При чём тут треугольник?

Хорошо. Площадь квадрата - частный случай площади прямоугольника.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

авторы этих букварей - идиоты и ничерта не понимают в том, о чем пишут

Да, а ты не знал? На заборе тоже пишут.

копипастить весь код для похожих классов

Не будет никаких похожих классов, только Shape. Квадраты, ромбы и черти в ступе создаются динамически. Твоя проблема в том, что ты думаешь, будто код должен повторять предметную область явно и декларативно. Я тут в соседней теме об этом говорил, что это не свойственно «классическим» языкам. В частности твоя иерархия может существовать как иерархия объектов, а не классов.

no-such-file ★★★★★
()
Ответ на: комментарий от crutch_master

Ну да. Квадрату подойдут формулы для площади как ромба, так и прямоугольника. А проблема в чём?

fernandos ★★★
()
Ответ на: комментарий от aist1

Проблемы у ООП начинаются тогда, когда его «принципы» рассматривают как догму.

В какой-нибудь жабке просто нет технической возможности не рассматривать их как догму. Так или иначе всё придётся делать через какую-нибудь ООПу. Отказаться - значит признать, что философия топ ынтерпрайз язычка оказалась ошибочной. Что собственно и произошло, когда туда начали активно пихать рефлексию и ооп ломать.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

Что именно ты хочешь копипастить? Например?

Вычисление площади треугольника и ромба. Второй - это 2 частных случая первого.

Лепотааа… Жирнотаааа!..

Nervous ★★★★★
()
Ответ на: комментарий от no-such-file

Не будет никаких похожих классов, только Shape. Квадраты, ромбы и черти в ступе создаются динамически.

Shape с полигоном внутри - это не спортивно. Так мы дойдем до того, что наследование не нужно, раз всё равно наследовать нечего и можно все реализовать через единственный супер-класс.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

наследование не нужно, раз всё равно наследовать нечего

Наследование для переопределения поведения и вправду не особенно часто нужно. Чаще всего наследование используется по принципу «абстрактный класс и туча реализаций», т.е. просто как вариация на тему интерфейсов. Лично мне сходу для глубокого наследования именно с добавлением/обновлением реализации только какие-то синтетические примеры приходят в голову.

через единственный супер-класс

Так-то не через один, будут же ещё билдеры, вычислятели площади и т.д. Вообще сам класс Shape, кроме композиции точек никакой другой функции не выполняет.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от no-such-file

Наследование для переопределения поведения и вправду не особенно часто нужно

А нахрена оно тогда вообще нужно.

Nervous ★★★★★
()
Ответ на: комментарий от Nervous

Кроме реализации интерфейсов можно, например, реализовать шаблон. Т.е. когда базовый класс определяет некий алгоритм, а потомок доопределяет, или переопределяет дефолтные детали своими.

Например, тот же Shape который определяет фигуру прямыми, может иметь потомка CubicShape с тем же интерфейсом, но уже с кубиками, а не с прямыми.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от crutch_master

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

А первом классе детей учат складывать 2 яблока и 3 апельсина.

ya-betmen ★★★★★
()
Ответ на: комментарий от no-such-file

Так-то не через один, будут же ещё билдеры, вычислятели площади и т.д.

Ну это уже, извините, какая-то функциональщина.

Твоя проблема в том, что ты думаешь, будто код должен повторять предметную область явно и декларативно.

Тут дело принципе, а не в предметной области. С геометрией понятно, что можно обойтись полигоном, но не все предметные области понятны, как геометрия. Поэтому вопрос стоит именно так, а реализация полигона - читерство.

crutch_master ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

Но это не первый класс. Потом эти делатели «вырастают» и действительно складывают 2 яблока с 3 апельсина.

crutch_master ★★★★★
() автор топика
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

не все предметные области понятны, как геометрия

Ну так какой вопрос, такой и ответ. Тебе показано, как это работает. В чём читерство с полигоном? Что тут нет 100500 наследований, как ты надеялся? Всё равно что спросить сумму чисел от 1 до 100 и жаловаться, что отвечающий не стал складывать, а посчитал по формуле.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от crutch_master

в куче букварей по ооп

С твоих слов таки первый. Очевидно, что для демонстрации одного аспекта какого-либо принципа в педагогических целях остальными часто пренебрегают.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.