34 / 34 / 5
Регистрация: 25.02.2013
Сообщений: 221
1

ООП ради ООП

28.05.2014, 19:22. Показов 2242. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Есть к примеру класс Cat который реализует интерфейс Movable, инкапсулирует цвет, и прочее. Имеет ли смысл создавать подклассы BlackCat, WhiteCat и т.д. которые по сути дела ничего нового не привносят? Правильно ли в таком случае создавать enum Сats и уже конкретный экземпляр enum'а(со своими полями) передавать в конструктор класса Cat и уже там присваивать значения полей?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2014, 19:22
Ответы с готовыми решениями:

ООП
Если составить схожесть и различия между ООП таких языков, как C++, C#, Python и Java, то какая...

ООП C++
Доброго времени суток, уважаемы пользователи CyberForum! Нуждаюсь в Вашей помощи. Прочитал уже...

Литература по ооп
Посоветуйте, пожалуйста, литературу по ооп.

ООП иерархия
Добрый вечер! Не могу понять пример из методички. Дана ирархия классов: и кусок кода: class...

14
Native x86
Эксперт Hardware
5187 / 3033 / 875
Регистрация: 13.02.2013
Сообщений: 9,635
28.05.2014, 19:31 2
Цитата Сообщение от Recreate Посмотреть сообщение
класс Cat который реализует интерфейс Movable, инкапсулирует цвет, и прочее. Имеет ли смысл создавать подклассы BlackCat, WhiteCat
Если базовый класс инкапсулирует цвет, то зачем создавать подклассы с цветовой дифференциацией штанов? ООП для того и существует, чтобы каждый экземпляр некоего класса хранил свое состояние независимо от декларации.
1
34 / 34 / 5
Регистрация: 25.02.2013
Сообщений: 221
28.05.2014, 19:41  [ТС] 3
Цитата Сообщение от quwy Посмотреть сообщение
Если базовый класс инкапсулирует цвет, то зачем создавать подклассы с цветовой дифференциацией штанов? ООП для того и существует, чтобы каждый экземпляр некоего класса хранил свое состояние независимо от декларации.
Так вот я тоже этого не понимаю. Препод говорит, что чем больше классов тем лучше. Я решил создать enum в котором перечисляются типы кошек с предустановленными цветами и прочими свойствами. Потом в конструктор класса Cat помещаю конкретный тип и всё работает. Правильно ли так делать?
0
Эксперт функциональных языков программированияЭксперт Java
4465 / 2699 / 484
Регистрация: 28.04.2012
Сообщений: 8,557
28.05.2014, 19:49 4
Лучший ответ Сообщение было отмечено Убежденный как решение

Решение

Цитата Сообщение от Recreate Посмотреть сообщение
Препод говорит, что чем больше классов тем лучше.
Классов должно быть ровно столько, сколько нужно для решения задачи (google: Бритва Оккама) и иерархия классов выстраивается исходя из требований к модели. Если требуется смоделировать поведение кошек в зависимости от цвета, то вполне логичным будет создать классы под разные окрасы (или виды окрасов, в зависимости от), в противном случае достаточно обойтись свойством «Цвет» в базовом классе и не плодить цветовые подклассы понапрасну, т.к. они избыточны.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
28.05.2014, 19:51 5
Цитата Сообщение от Recreate Посмотреть сообщение
Так вот я тоже этого не понимаю. Препод говорит, что чем больше классов тем лучше.
Но не так же! Можно в новых классах инкапсулировать цвет в других цветовых моделях. Например, базовый RGB, а потомки один захватывает ультрафиолет, расширяя модель до пяти плоскостей (Red, Green, Blue, Near Ultra Violet, Far Ultra Violet), другой хранит спектр видимого цвета через каждые два килоГерца, третий хранит оттенок, яркость, насыщенность, в четвёртом цвет субтрактивен. А значения цвета по классам раскидывать не нужно.
0
Native x86
Эксперт Hardware
5187 / 3033 / 875
Регистрация: 13.02.2013
Сообщений: 9,635
28.05.2014, 19:51 6
Цитата Сообщение от Recreate Посмотреть сообщение
Так вот я тоже этого не понимаю. Препод говорит, что чем больше классов тем лучше.
Если вопрос стоит так, то лучше углубиться в наследование "вертикально", чем плодить однотипные сущности "горизонтально". Сделать базовый класс ЖивоеСущество, от него унаследовать класс Животное, от него унаследовать Млекопитающее, от него унаследовать Кошачее, и уже от него унаследовать Кошку. И каждый тип функциональности реализовывать на максимально пригодном для него предке.

Цитата Сообщение от Recreate Посмотреть сообщение
Я решил создать enum в котором перечисляются типы кошек с предустановленными цветами и прочими свойствами. Потом в конструктор класса Cat помещаю конкретный тип и всё работает. Правильно ли так делать?
Вполне.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
28.05.2014, 19:53 7
Цитата Сообщение от korvin_ Посмотреть сообщение
Классов должно быть ровно столько, сколько нужно для решения задачи (google: Бритва Оккама)
А если его тренируют создавать классы без относительно дальнейшего применения? Просто чтоб запомнил, как это делается, а когда будет нужно, уже привычно создал классы.
0
pycture
28.05.2014, 19:57
  #8

Не по теме:

Цитата Сообщение от Recreate Посмотреть сообщение
Препод говорит, что чем больше классов тем лучше.
Кликните здесь для просмотра всего текста
- Мне это советовали врачи
- Они идиоты
- Но у них есть дипломы
- Значит они дипломированные идиоты
(с) Король говорит

0
Эксперт функциональных языков программированияЭксперт Java
4465 / 2699 / 484
Регистрация: 28.04.2012
Сообщений: 8,557
28.05.2014, 20:11 9
Цитата Сообщение от taras atavin Посмотреть сообщение
А если его тренируют создавать классы без относительно дальнейшего применения? Просто чтоб запомнил, как это делается, а когда будет нужно, уже привычно создал классы.
И как он узнает, когда нужно, если его не учили различать, когда нужно, а когда — нет?
0
34 / 34 / 5
Регистрация: 25.02.2013
Сообщений: 221
28.05.2014, 20:16  [ТС] 10
Цитата Сообщение от taras atavin Посмотреть сообщение
А если его тренируют создавать классы без относительно дальнейшего применения? Просто чтоб запомнил, как это делается, а когда будет нужно, уже привычно создал классы.
Дело в том что в дальнейшем эти классы используются. И перспектива создания по классу на кошку меня самого не удовлетворяет(предки кошки ЧёрнаяКошка и т.д. абсолютно пустые т.к. нет новых свойств что логично и поведение то же самое). Куда легче иметь один класс и не думая что это за кошка использовать его. + в моём случае проверок будет меньше, соответственно читабельность кода будет выше.
п.с. Я около года изучал программирование в полном вакууме и раньше особо не задумывался над ООПшностью. Создавал объекты имеющие только состояние и ни капли поведения. Чтобы управлять ими создавал сервисные(менеджер) классы, которые собственно производили какие-то расчёты и прочее. И тут вдруг мне говорят что это не правильно. В таком случае из объекта выходит какая-то помойка.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
28.05.2014, 20:24 11
Хорошо, допустим используется. А если проект пишется по принципу "Щас запустим, узнаем"? Тогда опять таки можно множить сущности, а только потом придумывать для них необходимость. Но нельзя идти в разрез с самим понятием класса. Класс хранит общее для всех объектов описание того, какие данные и о чём разрешено хранить объектам и код, с этими данными работающий, конкретные данные хранит объект.

Добавлено через 1 минуту
Цитата Сообщение от korvin_ Посмотреть сообщение
И как он узнает, когда нужно, если его не учили различать, когда нужно, а когда — нет?
Вот именно поэтому и надо для каждого класса сразу же придумывать, чем он будет отличаться от остальных типов, а не переменных.

Добавлено через 1 минуту
Цитата Сообщение от Recreate Посмотреть сообщение
Создавал объекты имеющие только состояние и ни капли поведения. Чтобы управлять ими создавал сервисные(менеджер) классы, которые собственно производили какие-то расчёты и прочее. И тут вдруг мне говорят что это не правильно. В таком случае из объекта выходит какая-то помойка.
Ту путал объекты со структурами и классы с пространствами имён.
0
34 / 34 / 5
Регистрация: 25.02.2013
Сообщений: 221
28.05.2014, 20:47  [ТС] 12
Цитата Сообщение от taras atavin Посмотреть сообщение
Ту путал объекты со структурами и классы с пространствами имён.
Прошу прощения. Я пишу на Java. Там нет структур. Насколько я понимаю структура это тот же бин, т.е. класс включающий только поля и методы доступа к ним. А пространство имён в Java это пакет...тут я уже не могу провести аналогию.
0
Эксперт функциональных языков программированияЭксперт Java
4465 / 2699 / 484
Регистрация: 28.04.2012
Сообщений: 8,557
28.05.2014, 20:47 13
Цитата Сообщение от Recreate Посмотреть сообщение
Создавал объекты имеющие только состояние и ни капли поведения. Чтобы управлять ими создавал сервисные(менеджер) классы, которые собственно производили какие-то расчёты и прочее. И тут вдруг мне говорят что это не правильно.
Это не неправильно, это другой подход, вот и всё.
0
34 / 34 / 5
Регистрация: 25.02.2013
Сообщений: 221
28.05.2014, 20:54  [ТС] 14
Вообщем послушав всех отписавшихся я сделал для себя вывод что: ненужно создавать класс/наследоваться от класса если он не обладает каким-то отличным от предка/других классов состоянием или поведением.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.05.2014, 07:00 15
Цитата Сообщение от Recreate Посмотреть сообщение
Прошу прощения. Я пишу на Java. Там нет структур. Насколько я понимаю структура это тот же бин, т.е. класс включающий только поля и методы доступа к ним.
Только поля без методов и операторов. На паскале она зовётся записью. Объектный подход заключается в объединении данных и обрабатывающего их кода, всё остальное - не ООП.
1. Класс должен быть категорией объектов.
2. Объединение объектов в класс должно быть закономерным и вытекать из общих для этих объектов свойств, причём, значимых для задачи, причём, значения чего либо не учитываются, учитывается диапазоны представимых значений, способы их интерпретации и операции над ними.
3. Ни один другой класс не должен объединять объекты с тем же набором значимых для задачи свойств, причём, значимых для задачи, причём, значения чего либо не учитываются, учитывается диапазоны представимых значений, способы их интерпретации и операции над ними.
"Белый кот" - не класс, а объект с определённым значением поля, а "летучая мышь" - это класс, отличный от класса "кот". Потому что может летать и владеет локацией. Или тот же кот, но с иным внутренним представлением полей. Или с иным набором полей, методов и операторов-членов, значимых для другого класса задач. Некоторые классы вообще не должны встречаться в одном и том же проекте, другие должны участвовать в отношении "предок-потомок", третьи имеет смысл иметь одновременно в одном проекте, но в виде взаимонезависимых.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2014, 07:00
Помогаю со студенческими работами здесь

Книжка о ООП
Ребята, такая ситуация - нужна книга по ООП. Знаю в интернетах такого полно, и в гугле не забанили,...

Книга по ООП
Народ,подскажите ,какую книгу можно почитать по ООП,чтоб более углубленно вникнуть в принципы?

Инкапсуляция в ООП
Относятся ли ниже написанные темы Объектно Ориентированного Программирования, к Инкапсуляции? ...

Недостатки ООП
Задали написать небольшую статью о недостатках этой замечательной парадигмы. В нашей группе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru