Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
34 / 34 / 5
Регистрация: 25.02.2013
Сообщений: 221

ООП ради ООП

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

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

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

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

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

14
Native x86
Эксперт Hardware
 Аватар для quwy
6853 / 3787 / 1024
Регистрация: 13.02.2013
Сообщений: 11,861
28.05.2014, 19:31
Цитата Сообщение от Recreate Посмотреть сообщение
класс Cat который реализует интерфейс Movable, инкапсулирует цвет, и прочее. Имеет ли смысл создавать подклассы BlackCat, WhiteCat
Если базовый класс инкапсулирует цвет, то зачем создавать подклассы с цветовой дифференциацией штанов? ООП для того и существует, чтобы каждый экземпляр некоего класса хранил свое состояние независимо от декларации.
1
34 / 34 / 5
Регистрация: 25.02.2013
Сообщений: 221
28.05.2014, 19:41  [ТС]
Цитата Сообщение от quwy Посмотреть сообщение
Если базовый класс инкапсулирует цвет, то зачем создавать подклассы с цветовой дифференциацией штанов? ООП для того и существует, чтобы каждый экземпляр некоего класса хранил свое состояние независимо от декларации.
Так вот я тоже этого не понимаю. Препод говорит, что чем больше классов тем лучше. Я решил создать enum в котором перечисляются типы кошек с предустановленными цветами и прочими свойствами. Потом в конструктор класса Cat помещаю конкретный тип и всё работает. Правильно ли так делать?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
28.05.2014, 19:49
Лучший ответ Сообщение было отмечено Убежденный как решение

Решение

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

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

Не по теме:

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от Recreate Посмотреть сообщение
Создавал объекты имеющие только состояние и ни капли поведения. Чтобы управлять ими создавал сервисные(менеджер) классы, которые собственно производили какие-то расчёты и прочее. И тут вдруг мне говорят что это не правильно. В таком случае из объекта выходит какая-то помойка.
Ту путал объекты со структурами и классы с пространствами имён.
0
34 / 34 / 5
Регистрация: 25.02.2013
Сообщений: 221
28.05.2014, 20:47  [ТС]
Цитата Сообщение от taras atavin Посмотреть сообщение
Ту путал объекты со структурами и классы с пространствами имён.
Прошу прощения. Я пишу на Java. Там нет структур. Насколько я понимаю структура это тот же бин, т.е. класс включающий только поля и методы доступа к ним. А пространство имён в Java это пакет...тут я уже не могу провести аналогию.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2773 / 491
Регистрация: 28.04.2012
Сообщений: 8,760
28.05.2014, 20:47
Цитата Сообщение от Recreate Посмотреть сообщение
Создавал объекты имеющие только состояние и ни капли поведения. Чтобы управлять ими создавал сервисные(менеджер) классы, которые собственно производили какие-то расчёты и прочее. И тут вдруг мне говорят что это не правильно.
Это не неправильно, это другой подход, вот и всё.
0
34 / 34 / 5
Регистрация: 25.02.2013
Сообщений: 221
28.05.2014, 20:54  [ТС]
Вообщем послушав всех отписавшихся я сделал для себя вывод что: ненужно создавать класс/наследоваться от класса если он не обладает каким-то отличным от предка/других классов состоянием или поведением.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.05.2014, 07:00
Цитата Сообщение от Recreate Посмотреть сообщение
Прошу прощения. Я пишу на Java. Там нет структур. Насколько я понимаю структура это тот же бин, т.е. класс включающий только поля и методы доступа к ним.
Только поля без методов и операторов. На паскале она зовётся записью. Объектный подход заключается в объединении данных и обрабатывающего их кода, всё остальное - не ООП.
1. Класс должен быть категорией объектов.
2. Объединение объектов в класс должно быть закономерным и вытекать из общих для этих объектов свойств, причём, значимых для задачи, причём, значения чего либо не учитываются, учитывается диапазоны представимых значений, способы их интерпретации и операции над ними.
3. Ни один другой класс не должен объединять объекты с тем же набором значимых для задачи свойств, причём, значимых для задачи, причём, значения чего либо не учитываются, учитывается диапазоны представимых значений, способы их интерпретации и операции над ними.
"Белый кот" - не класс, а объект с определённым значением поля, а "летучая мышь" - это класс, отличный от класса "кот". Потому что может летать и владеет локацией. Или тот же кот, но с иным внутренним представлением полей. Или с иным набором полей, методов и операторов-членов, значимых для другого класса задач. Некоторые классы вообще не должны встречаться в одном и том же проекте, другие должны участвовать в отношении "предок-потомок", третьи имеет смысл иметь одновременно в одном проекте, но в виде взаимонезависимых.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.05.2014, 07:00
Помогаю со студенческими работами здесь

ООП иерархия
Добрый вечер! Не могу понять пример из методички. Дана ирархия классов: и кусок кода: class A{ public: f(){cout<<”A”;}} ...

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

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

Инкапсуляция в ООП
Относятся ли ниже написанные темы Объектно Ориентированного Программирования, к Инкапсуляции? Темы: 1.) Модификаторы доступа. 2.)...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru