-
- I had a problem, so I've decided to use Java. Now I have ProblemFactory... - lloyd(26.04.2020 16:12)
- "Мякотки ООП" тут нет. 1 "класс на классе и классом погоняет" -
идеология Java, которая строится вокруг понятия класса (единица
трансляции .class), это базовая единица языка. 2. Это исключительно
учебный пример автор которого слишком увлёкся и родил монстра. 3.
Для Java это говнокод. Если такой говнокод встретится в продакшн,
код должен быть переписан, а его автор (если он регулярно порождает
такое) выпизжен на мороз. - RxTx(26.04.2020 15:55)
- Что-то не уверен. Не исключено, что вот такое построение софта
требуется для каких-нибудь электронных таблиц или еще чего-то
такого, что мне не ведомо. - Argon(26.04.2020 16:24)
- Не уверен в чем? - RxTx(27.04.2020 19:39)
- что это однозначно считается говнокодом - Argon(27.04.2020 20:41)
- Не уверен в чем? - RxTx(27.04.2020 19:39)
- Что-то не уверен. Не исключено, что вот такое построение софта
требуется для каких-нибудь электронных таблиц или еще чего-то
такого, что мне не ведомо. - Argon(26.04.2020 16:24)
- Чужой код на ООП обычно противно разбирать :), но приятно, когда пишешь на нем сама. - Kceния(26.04.2020 14:33)
- В данном случае ничего не делают , но могут. Но что-то в коде не того. Идентификация инстанции в фильтре по типу ad.getVehicleTypeByPurpose().equals(vehicleType) и надо городить огород с передачей параметра при фильтрации пустого класса данного типа. И есть еще и enum VehicleAllTypes по которому можно и определить тип но надо привязать класс к enum. framer(380 знак., 26.04.2020 13:50)
- А у них нет нормальных человеческих примеров? Чтобы сразу стало
понятно, что голый Си - г-но, а ООП - круто и полезно. Обязательно
вот эта дебильная хрень с рекламой автомобилей? Или это курсы для
креаклов? - SciFi(26.04.2020 11:41)
- Никто не говорит, что голый Си говно, но действительно есть случаи, когда хочется плюсов (про яву говорить не буду, я её не знаю). И здесь есть хорошо известная методическая проблема: примеры в учебниках должны быть достаточно простыми, иначе суть обсуждаемого вопроса потонет в деталях, но простые примеры на самом деле не требуют тяжёлой артиллерии. В результате некоторые думают, что в любой непонятной ситуации нужно городить иерархию классов, но это не так, во всяком случае йцyкeн(9 знак., 26.04.2020 12:41)
- Все остальные примеры слишком просты для переворота сознания ) - Argon(26.04.2020 11:43)
- Классы которые ничего не делают, включая пустые определения структур -- нужны для определения нового, отличного от других типа. Потому, что где-то в коде потом что-то может делаться по-разному в зависимости от типа. Кстати с этим связана такая запутывающая особенность, что в C++ ключевое слово typedef на самом деле не определяет новый тип, а лишь создаёт алиас (другое имя) для уже существующего другого типа. А выражение вида "struct X {};" определит новый тип X. - fk0(26.04.2020 11:18)
- Надо понимать, что класс -- это не структура. Применительно к C++
мне больше нравится слово тип. Тип -- это сущность существующая
преимущественно в момент компиляции и обладающая некоторыми
свойствами, в машинном коде она превращается в функции и структуры
в конечном счёте, а то и вовсе ни во что не превращается, если все
вычисления проделаны при компиляции. Тип на самом деле это очень
легковесная конструкция. Это лишь абстракция служащая для
определения отношений между fk0(1609 знак., 26.04.2020 11:13)
- После того, как в моем коде на C++ завелись структуры с
конструкторами (и это даже имеет смысл) грань между классами и
структурами кажется мне крайне размытой. - AlexG(26.04.2020 15:00)
- В C++ у struct все члены по умолчанию public, у class - private. На этом различия в крестах заканчиваются. - lloyd(26.04.2020 16:10)
- Ответом может быть агретагная инициализация. Если она возможна -- это скорей структура. В C# четко провели грань: структура это значение, а класс -- ссылка в кучу garbage collector'a. - fk0(26.04.2020 15:11)
- >сущность существующая преимущественно в момент компиляции< В
Java, говорят, эти сущности остаются в компилированном байт-коде.
Все имена остаются там же. Т.е. можно взять чужой компилированный
jar и воспользоваться его внутренностями (конечно, если они
public). - Argon(26.04.2020 11:41)
- Точнее в .class файлах. Jar-файл это обыкновенный .zip, распакуй
его. Посмотреть внутренности .class файлов можешь или каким-нибудь
современным хипсторским декомпилятором (все они говно, тогда ищи
сам), или если возьмешь старые версии Java декомпилятором JAD - он
покажет тебе всю метадату и непосредственно байткод или из байткода
воссоздаст java-исходник. - RxTx(26.04.2020 16:10)
- jar или class - не суть, идея в том, что вся иерархия классов и имен после компиляции не пропадает. - Argon(26.04.2020 16:19)
- Точнее в .class файлах. Jar-файл это обыкновенный .zip, распакуй
его. Посмотреть внутренности .class файлов можешь или каким-нибудь
современным хипсторским декомпилятором (все они говно, тогда ищи
сам), или если возьмешь старые версии Java декомпилятором JAD - он
покажет тебе всю метадату и непосредственно байткод или из байткода
воссоздаст java-исходник. - RxTx(26.04.2020 16:10)
- После того, как в моем коде на C++ завелись структуры с
конструкторами (и это даже имеет смысл) грань между классами и
структурами кажется мне крайне размытой. - AlexG(26.04.2020 15:00)
- отношусь к этому прозаичнее - у этих ООП "голые" структуры моветон
(слыхал и здравые толки почему, но это отдельный вопрос), а даже
если хочется структуру, пусть константную, то выпилить её из класса
можно более-менее удобно, если она там уже структура, а этим никто
не заморачивается. пихается в класс обычно как собачка
прогуливается - кустик увидела и пометила:). плюс если наследуешь,
а потом добавляешь свойства и методы, то удобнее. например, в
данном случае Vit(371 знак., 26.04.2020 11:01)
- Стало быть, вот эта многовложенная иерархия нужна для простой
расширяемости программы? Попробую сейчас подрасширить Truck ) - Argon(26.04.2020 11:36)
- Как я понимаю, это учебный код, хоть и раздутый поэтому ругать
автора или обсуждать этот код всерьёз просто глупо. "Расширяемсть"
здесь лишь учебная. Реальный ООП код не должен расширяться
переписыванием класса AdsService с добавлением методов
filterByVehicleTypeBy* - RxTx(26.04.2020 16:02)
- А кто сказал, что расширяться добавлением методов? В том-то и дело,
что всего лишь добавлением значений в enum и соответствующих
классов-потомков для классов вида TrackType. А все методы бы
оставались неизменными. - Argon(26.04.2020 16:25)
- Для чего существуют AdsService.filterByVehicleTypeByPurpose(),
AdsService.filterByVehicleTypeByBody(),
AdsService.filterByVehicleTypeByFuel() с парными им
VehicleAd.getVehicleTypeByPurpose()
VehicleAd.getVehicleTypeByBody() VehicleAd.getVehicleTypeByFuel и
что ты будешь делать если появятся фары, багажники, бамперы и проч.
критерии и надо построить фильтрацию по ним. RxTx(570 знак., 27.04.2020 19:27)
- Фары, багажники, бамперы - это не типы/подтипы машин и к задаче не относятся. Я имел ввиду возможность расширения TruckType на подтипы добавлением потомков TruckType, далее классов-внуков, классов-правнуков и т.п. с сохранением возможности фильтрации как по подтипу, так и по типу TruckType. Уже сделал, все получилось. - Argon(27.04.2020 20:48)
- Для чего существуют AdsService.filterByVehicleTypeByPurpose(),
AdsService.filterByVehicleTypeByBody(),
AdsService.filterByVehicleTypeByFuel() с парными им
VehicleAd.getVehicleTypeByPurpose()
VehicleAd.getVehicleTypeByBody() VehicleAd.getVehicleTypeByFuel и
что ты будешь делать если появятся фары, багажники, бамперы и проч.
критерии и надо построить фильтрацию по ним. RxTx(570 знак., 27.04.2020 19:27)
- А кто сказал, что расширяться добавлением методов? В том-то и дело,
что всего лишь добавлением значений в enum и соответствующих
классов-потомков для классов вида TrackType. А все методы бы
оставались неизменными. - Argon(26.04.2020 16:25)
- Как я понимаю, это учебный код, хоть и раздутый поэтому ругать
автора или обсуждать этот код всерьёз просто глупо. "Расширяемсть"
здесь лишь учебная. Реальный ООП код не должен расширяться
переписыванием класса AdsService с добавлением методов
filterByVehicleTypeBy* - RxTx(26.04.2020 16:02)
- Стало быть, вот эта многовложенная иерархия нужна для простой
расширяемости программы? Попробую сейчас подрасширить Truck ) - Argon(26.04.2020 11:36)
- Насчет жабы ничего сказать не могу, а в С++ введение типов позволяет делать шаблонную магию, переопределяя поведение даже для объектов нулевого размера. То есть оперативки это не ест, зато вводит отдельную сущность на уровне языка. Но тут главное не перестараться: шаблонный код генерится заново для каждого типа, поэтому иногда вводят специальный базовый класс и реализацию завязывают на него, иначе будет как у boost::container::small_vector<T, size_t>, где для векторов lloyd(39 знак., 26.04.2020 10:47)