|
107 / 107 / 58
Регистрация: 04.03.2013
Сообщений: 479
|
|
Совет по архитектуре программы06.03.2015, 21:05. Показов 1717. Ответов 26
Метки нет (Все метки)
Задание: Смоделировать экосистему Аквариум. В нем существуют травоядные рыбы, хищники, препятствия, водорости.
Использую композицию (в аквариум заношу экземпляры всех остальных классов). Как лучше реализовать класс травоядных и хищных рыб? Наследование от абстрактного класса Fish? или же интерфейс? Общие методы: growUp(), move(), die(), eat(но тут разные параметры, у травоядных - WaterPlant, у хищных - HerbivorousFish), reproduce(так же параметры отличаются).
0
|
|
| 06.03.2015, 21:05 | |
|
Ответы с готовыми решениями:
26
Нужен небольшой совет по архитектуре ООП и БД. Нужен совет, пояснение по архитектуре |
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
| 06.03.2015, 21:31 | |
|
Serg22, для рыб общий базовый класс. Для еды интерфейс. Почему у метода reproduce отличаются параметры?
1
|
|
|
107 / 107 / 58
Регистрация: 04.03.2013
Сообщений: 479
|
||||||
| 07.03.2015, 21:22 [ТС] | ||||||
|
Ошибся( Разные возвращаемые типы у reproduce(). Куда его добавлять? Или реализовать в каждом классе отдельно?
Вот с классом получилось Fish
0
|
||||||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
| 08.03.2015, 00:52 | |
|
Serg22, методы должны быть абстрактными
Интерфейс один. Зачем два? reproduce тоже должен сидеть в абстрактном классе
1
|
|
|
107 / 107 / 58
Регистрация: 04.03.2013
Сообщений: 479
|
|
| 08.03.2015, 13:57 [ТС] | |
|
KEKCoGEN, просто у меня же возвращаемые значения отличаются в методе reproduce() , придется написать два разноименных метода? одним никак не обойтись ?
И для еды в интерфейсе как у меня получится обойтись одним интерфейсом если у меня разные параметры метода eat() для хищных и нехищных рыб?
0
|
|
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
| 08.03.2015, 16:48 | |
|
Serg22, думаю вам нужно почитать про интерфейсы. Реализаций может быть много, но интерфейс все равно один.
0
|
|
|
107 / 107 / 58
Регистрация: 04.03.2013
Сообщений: 479
|
||||||||||||||||
| 08.03.2015, 17:37 [ТС] | ||||||||||||||||
|
KEKCoGEN, Вы имеет в виду такой интерфейс?
Добавлено через 11 минут Вот еще что пришло в голову: Не используя интерфейс, я все методы помещу в абстрактный класс указав его как
1
|
||||||||||||||||
|
284 / 264 / 173
Регистрация: 27.07.2014
Сообщений: 584
|
|
| 08.03.2015, 18:50 | |
|
Serg22, Абстрактный класс нужен если между классами есть понятие IS-A т.е. Cat is a Animal. А для интерфейса этого не надо,вы объявляете интерфейс публичным и во всем проекте для какого класса необходимо иметь такие методы он просто его реализует этот интерфейс
0
|
|
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
||
| 08.03.2015, 18:50 | ||
|
Если у наследников абстрактного класса должны быть разные реализации метода то используем не метод, а интерфейс, причем пишем что-то типа abstract class MyFish implements MyLolInterface {} что бы потомки принудительно реализовывали методы из интерфейса надеюсь не очень мутно написал
1
|
||
|
107 / 107 / 58
Регистрация: 04.03.2013
Сообщений: 479
|
|
| 08.03.2015, 18:59 [ТС] | |
|
Sanan07, в моем случае хищные и нехищные рыбы являются (is-a) подтипами Fish, т.е в даном случае использую абстрактный класс?
0
|
|
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
|
| 08.03.2015, 19:10 | |
|
и я бы не делал абстрактными методы типа move() die(), все рыбы двигаются и умирают, проще один раз реализовать эти методы прямо в абстрактном классе и все
а Fish да, делать абстрактным классом если четкие парни меня поправят если не прав то скажу спасибо, потому что сам учусь на таких темах
1
|
|
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
||
| 08.03.2015, 19:13 | ||
|
Так же любая рыба вне зависимости от вида умеет плавать, есть и размножаться. Поэтому реализации этих методов должны быть в базовом классе. Все рыбы едят еду. Еда может быть разная, но какая бы она не была, это все равно еда. Поэтому еда это интерфейс. Когда рыба размножается, она воспроизводит рыбу. Рыба неможет воспроизвести тумбочку поэтому этот метод так же сидит в базовом классе и возаращает рыбу.
1
|
||
|
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
|
|
| 08.03.2015, 19:17 | |
|
0
|
|
|
284 / 264 / 173
Регистрация: 27.07.2014
Сообщений: 584
|
|
| 08.03.2015, 19:34 | |
|
Для конкретного случая одного абстрактного класса Fish вполне достаточно. Интерфейс надо использовать, если в проекте есть классы не связанные друг с другом, но имеют одинаковые методы. т.е. если были не только рыбы, но и например люди можно было бы создать интефейс с методами eat,die,reproduce и т.д. далее создать абстрактные классы Fish и Human, а дальше уже конкретные типа WaterPlantFish или Woman.
1
|
|
|
107 / 107 / 58
Регистрация: 04.03.2013
Сообщений: 479
|
||||||||||||||||
| 08.03.2015, 23:25 [ТС] | ||||||||||||||||
|
Всем большое спасибо за разъяснения.
Как я понял сделать необходимо так:
0
|
||||||||||||||||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|||||||
| 08.03.2015, 23:34 | |||||||
|
Добавлено через 7 минут Serg22, про еду должно быть наоборот класс WaterPlant должен реализовывать интерфейс Food. Параметризация интерфейса тут ненужна. Метод еды должен выглядеть как
В вашем примере хищная рыба может съесть другую рыбу и тогда нехищная рыба в реализации метода интерфейса вызовет метод die() А у вас еда ест сама себя.
1
|
|||||||
|
107 / 107 / 58
Регистрация: 04.03.2013
Сообщений: 479
|
|
| 08.03.2015, 23:46 [ТС] | |
|
KEKCoGEN, у меня метод eaten() существует только в WaterPlant. При реализации интерфейса Food классом Waterplant я не могу обратиться к food.eaten() в методе eat так само как при реализации в абстрактном Fish() интерфейс Food. Или я Вас не так понял..
0
|
|
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
|
| 08.03.2015, 23:53 | |
|
Serg22, в интерфейсе Food должен быть метод eaten
У вас там метод eat и это ошибочно. Еда неможет есть. Она может быть только съеденна.
0
|
|
|
107 / 107 / 58
Регистрация: 04.03.2013
Сообщений: 479
|
||||||||||||||||
| 09.03.2015, 00:04 [ТС] | ||||||||||||||||
|
Что то уже совсем туплю(
Метод в интерфейсе:
0
|
||||||||||||||||
|
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
|
||||||||||||||||
| 09.03.2015, 00:05 | ||||||||||||||||
2
|
||||||||||||||||
| 09.03.2015, 00:05 | |
|
Помогаю со студенческими работами здесь
20
Нужен совет по написанию программы на C# Нужен совет по созданию программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
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. . .
|