|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.08.2011, 01:52 | #1 |
Пользователь
Регистрация: 29.08.2011
Сообщений: 14
|
Автоматический интерфейс, жесточайшая инкапсуляция. Как реализовать?
Здравствуйте.
Создаю библиотеку для работы с DirectX, избавляющую от раздражающих мелочей. Идея такова: Есть один интерфейс предок всех объектов библиотеки. Пользователь библиотеки не видит ни один класс, ни внешние включения(нет ни одной строки #include) а только функции для работы с void* "объектами". В теле функций используется только предок(не считая Make...), конкретный метод находится автоматом за счёт virtual. Жесткая инкапсуляция! Вопрос: Как можно ограничить количество методов в интерфейсе, чтобы был под конкретный обьект. Проблема в том что в пользовательских функциях нужно использовать преобразование в базовый класс. Что-то крутится в мыслях, нащупать не могу. Код ниже естественно упрощённый, сама идея. Код:
Код:
Код:
|
30.08.2011, 08:28 | #2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Вы на С пишите? В данном примере, что вы привели, все верно. Я бы вам посоветовал вашу базовую структуру рассмотреть более внимательно и выделить раздельные части, и уже те части наследовать другими структурами. Если хотите чтобы всегда был общий родитель, создайте пустой объект к примеру и от него наследуйте.
p.s. как то странно говорить о проектировании ООП иерархии с использованием не ООП языка. |
30.08.2011, 10:49 | #3 |
Пользователь
Регистрация: 29.08.2011
Сообщений: 14
|
BOBAH13, я использую C++. Структуры в коде только для краткости кода и удобства понимания идеи. Если базовый разделить на части, то какая часть будет в деле при вызове ((All*)o)->??. Если наследовать от пустого класса, то нельзя вызвать ни один метод, базового - их нет.
Жаль невозможно сделать такое: Код:
|
30.08.2011, 10:58 | #4 | |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Цитата:
|
|
30.08.2011, 14:55 | #5 | |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
Цитата:
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
|
|
30.08.2011, 15:13 | #6 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
У меня просто "плохая" привычка следовать документации и основных принципов используемого языка.
|
30.08.2011, 15:28 | #7 | |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
Цитата:
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
|
|
30.08.2011, 17:21 | #8 | |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
Цитата:
Кстати, код из первого поста не мог быть написан на С, в С нет наследования
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
|
30.08.2011, 19:03 | #9 |
Пользователь
Регистрация: 29.08.2011
Сообщений: 14
|
Люди, зачам гадать над очевидным...
Неверно я свою задачу описал(не точно). Хочу чтобы по селектору(в смысле "->") базового класса(структкры) выезжал интерфейс(поля) истинного класса(структкры) потомка. Причём базовый не содержит тех методов что в производных классах. Я почти решил задачу. |
31.08.2011, 00:41 | #10 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
Начавший
Жесткая инкапсуляция! на самом деле это жОсткое порно. никакого контроля типов. особо доставляет абсолютная беспомощность "библиотеки" к такого рода (говно)коду: CAMERA c = MakeMesh(0); MESH m = MakeCamera(0); а самая веселуха начинается здесь. int i = 0; Draw(&i); Если базовый разделить на части, то какая часть будет в деле при вызове ((All*)o)->??. Если наследовать от пустого класса, то нельзя вызвать ни один метод, базового - их нет. Схема дальнейших действий мне видится примерно такой: сначала читать про dynamic_cast. Потом - выкинуть dynamic_cast и читать Буча - про полиморфизм и ООП. Потом всё переделать.
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как реализовать подобный графический интерфейс | alexplato | Общие вопросы .NET | 7 | 14.09.2011 07:59 |
Инкапсуляция | Syltan | Общие вопросы C/C++ | 21 | 08.10.2009 17:03 |
Инкапсуляция | psycho-coder | Общие вопросы Delphi | 4 | 14.08.2009 13:04 |
Инкапсуляция | Lyxor | Общие вопросы Delphi | 0 | 29.06.2008 13:06 |