Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98

Что лучше: расширить интерфейс класса или сделать публичным подкласс?

18.07.2016, 11:56. Показов 714. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос такой. Вот у меня есть устройство (class device ), у него есть регистры (class register) . Легче всего, по - моему, создать класс устройство и отдельно класс регистр. Т.к. устройство состоит из регистра, точнее включает его ( строгая композиция, т.к. без устройства нет регистра), то я хочу реализовать композицию.

Проблема такая. У класса register есть методы (8 бит - 8 методов геттеров ) , проверяющие отдельные биты. Если данный класс внести под private, то тогда нагромаждается интерфейс класса устройство, т.к. придется методы регистра перенести в интерфейс устройства , чтобы получить доступ к ним.

Грамотно ли внести класс register в public????

Т.е. доступ к регистру буде такой
device.register.getStatusError();
device.register.getStatusBuf();
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.07.2016, 11:56
Ответы с готовыми решениями:

Статические функции или экземпляры класса - что лучше использовать?
Добрый день, господа! Вопрос собственно из темы - что лучше использовать, когда не нужно моделировать никакого наследования, а только...

Что лучше, проверять массив или сделать 10 условии?
Всем привет! Есть 10 форм с разными id. Как лучше проверять с какой формы пришел запрос? Создать массив вместо ключа указав id формы и...

Стоит 4 гига. Windows7 64. Что лучше сделать,отключить часть процесса автозапуска,а какие за что отвечают не пойму, или докупить ещё планок памяти?
Не давно заметил что комп иногда "притормаживает",а гаджет "индикатор ЦП" показывает нагрузку в тот момент до 70% озу. Стоит 4 гига....

4
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
18.07.2016, 12:05
Цитата Сообщение от Oryel Посмотреть сообщение
Грамотно ли внести класс register в public????
правило такое: если сомневаетесь - всегда оставляйте в приватах.

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

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

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

поэтому вопрос: а нужен ли им вообще, этот ваш регистр?

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

а если нужен, тогда я бы сделал так:

C++
1
device.getRegister().getStatusError();
то есть, сам по себе регистр в привате,
но девайс может выдать его по требованию.

этот способ хорош тем, что сохраняется контроль за точкой доступа.
в случае чего туда можно будет вставить какие нибудь проверки,
например.
0
11 / 1 / 1
Регистрация: 02.10.2015
Сообщений: 98
18.07.2016, 12:40  [ТС]
спасибо, решил пока что убрать данный класс.

А где вообще можно мудрости по ООП набраться?. Книги читаю, но нужно как-то на примерах, а примеров мало хороших.

Когда тогда уместна композиция? и в чем ее преимущество?
Т.к. в книгах примеры примитивные (точка, и фигура), а более сложные примеры?
0
Одессит
 Аватар для kylroma
243 / 88 / 44
Регистрация: 30.12.2013
Сообщений: 316
Записей в блоге: 2
18.07.2016, 15:50
Oryel, можно поучить паттерны, кроме самих паттернов, добавляется понимания к всяким наследованиям, полиморфизму.
Я изучал паттерны по книге Фримена, она написана для java, но примеры легко переводил для с++, на крайний случай есть в интернете примеры с книги для с++.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
18.07.2016, 22:06
Цитата Сообщение от Oryel Посмотреть сообщение
Проблема такая. У класса register есть методы (8 бит - 8 методов геттеров ) , проверяющие отдельные биты. Если данный класс внести под private, то тогда нагромаждается интерфейс класса устройство, т.к. придется методы регистра перенести в интерфейс устройства , чтобы получить доступ к ним.

Девайс
порт, это же обычно медленная штуковина. Тогда можно такие методы как getStatusBuffer(), getStatusError() сделать членами device и обёртками для вызова одного метода getByte(int pos) класса - члена (registеr). Каждая обёртка передаёт свой номер разряда. Доп. точка доступа - см. совет Hoggy. Нужно ли Вам их открывать Вам и знать полагается.
Композиция это достаточно мощный приём и может быть даже альтернативой наследованию. В частности, если предполагается самостоятельное использование для класса - члена. Хотя иногда идут и на определение вложенных классов. Для управления информацией в относительно большом классе вполне оправдано.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2016, 22:06
Помогаю со студенческими работами здесь

Что лучше: плагин чата в WordPress, или самому сделать через php, ajax?
Я сделал чат на пхп и аякс, впринципе все работает как надо. Просто каждые 2 секунды через аякс к базе обращается каждая страничка...

НЕ создаётся подкласс класса string
Почему, друзья? #include <stdio.h> #include <string> using namespace std; int main () { string stroka ("stroka"); class...

как лучше всего добавлять предопределенные изменяемые значения char в интерфейс и реализацию класса?
Есть несколько непонятных мне моментов связанных с тем как использовать char в классе. 1. как лучше всего добавлять предопределенные...

как лучше всего добавлять предопределенные изменяемые значения массива char в интерфейс и реализацию класса?
Есть несколько непонятных мне моментов связанных с тем как использовать char в классе. 2. Как сделать тоже самое но с массивом...

Подкласс не видит поля вложенного класса суперкласса
Делаю стек на основе линейного списка. class List{ static protected Data first; static protected Data head; protectd...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru