Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2013, 08:06   #1
intmain
Играюсь с Python
Форумчанин
 
Аватар для intmain
 
Регистрация: 12.12.2012
Сообщений: 340
По умолчанию Инкапсуляция

Цитата:
Как водится на хабре, комментарии оказались во многом ценнее самого поста
Там самые ценные комментарии это те которые публикуют НЛО и быстро сматываются.

Цитата:
Инкапсуляция
На Си я думаю это понятно. интерфейс - все те костыли которые лежат в заголовочном файле someShit.h, скрытая реализация в someShit.с - файле.

Цитата:
Полиморфизм
А вот на это хотел бы взглянуть, как такое делают на Си, не С++.
через передачу структур в виде указателя void* ? И в таких структурах, наверное первое поле общего типа и задает тип текущего объекта, так?

Код:
struct A
{
	int type;
	float v[3];
}

struct B 
{
	int type;
	char name[64];
}

А дальше идет куча проверок что же это за тип и отсылка его в другую специализированную для его обработки процедуру ?
Что ел то - в долг, что жил то - зря.
Для избранных. ))
Секретные разработки
intmain вне форума Ответить с цитированием
Старый 01.08.2013, 09:22   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от intmain Посмотреть сообщение
На Си я думаю это понятно. интерфейс - все те костыли которые лежат в заголовочном файле someShit.h, скрытая реализация в someShit.с - файле.
Нет, это с инкапсуляцией ничего общего не имеет.

Цитата:
Сообщение от intmain Посмотреть сообщение
А вот на это хотел бы взглянуть, как такое делают на Си, не С++.
Ну и взгляните. В заголовочных файлах Windows есть куча интерефейсов и для С и для С++ в одном файле. Linux ядро тоже так делает, можете посмотреть сорцы.

Цитата:
Сообщение от intmain Посмотреть сообщение
И в таких структурах, наверное первое поле общего типа и задает тип текущего объекта, так?
Нет, тип нигде не указывается.
Цитата:
Сообщение от intmain Посмотреть сообщение
А дальше идет куча проверок что же это за тип и отсылка его в другую специализированную для его обработки процедуру ?
В С++ все проверки делаются во время компиляции. В С еквивалента нет. Ну да, *можно* записывать тип объекта и проверять, но это очень большой overhead. Бессмыслено пытаться писать на С++ с помощью С.
waleri вне форума Ответить с цитированием
Старый 01.08.2013, 10:31   #3
intmain
Играюсь с Python
Форумчанин
 
Аватар для intmain
 
Регистрация: 12.12.2012
Сообщений: 340
По умолчанию

Цитата:
Бессмысленно пытаться писать на С++ с помощью С.
Да при чем тут С++, я использую возможности обычного С.

Цитата:
Нет, это с инкапсуляцией ничего общего не имеет.
Ну а пример инкапсуляции на Си тогда где ?
Свой я уже выше привел, оверхеда там в упор не вижу.

В Си модульный принцип построения (вместо классов), модули это как раз связка *.h + один или несколько *.с
*.h - интерфейсная часть, *.с - реализация.
Пользователь модуля видит только интерфейсную часть, реализация от него скрыта. И куда тогда от сюда позвольте поинтересоваться пропала инкапсуляция?
Что ел то - в долг, что жил то - зря.
Для избранных. ))
Секретные разработки
intmain вне форума Ответить с цитированием
Старый 01.08.2013, 19:32   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Как раз про Вашу ситуацию - попытках писать в сущностях с++, выражая их на си и будет
Цитата:
Бессмысленно пытаться писать на С++ с помощью С.
эта фраза, я полагаю, происходит от олдфажной поговорки "программист на фортране может написать программу на фортране на любом языке".
Инкапсуляция в терминах модуля сложна в том плане, что Вы получите сложную работу с внутренними глобальными переменными модуля, для имитации private полей "классов" -структур, ещё и пачку аксессоров придётся городить. И коли хотите задействовать - то на си сделать это непосредственно будет очень сложно.

По теме - внимательно читаю, отмечаю для себя важные крупицы, но сказать пока нечего ) так что удачи и ровной дороги вперёд !
Ну, разве что могу сказать, что путь к пониманию для чего нужна инкапсуляция и полиморфизм в реальном проекте частенько долгий и требует опытов и опыта, поэтому важно хорошенько совмещать теорию с практикой - тренировать изученную практику на небольших задачах, и так по кругу.
phomm вне форума Ответить с цитированием
Старый 01.08.2013, 20:21   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от intmain Посмотреть сообщение
Свой я уже выше привел, оверхеда там в упор не вижу.
Цитата:
А дальше идет куча проверок что же это за тип и отсылка его в другую специализированную для его обработки процедуру ?
А это не оверхед, не?

А что касается инкапсуляции, то почему вы решили, что она вообще есть в С?

Тут вопрос семантики - что есть инкапсуляция, ибо разбиение на заголовочный файл и файл с имплементацией есть и в С++ но инкапсуляцией там называется совсем другое.
waleri вне форума Ответить с цитированием
Старый 01.08.2013, 23:48   #6
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

есть мнение, что Beermonza был прав: читать у кого более полиморфный или инкапсулированный, в теме про создание игры, не особо интересно. особенно принимая во внимание, что в главной истории пока пишется только абстракт и введение, и до основной части, в которой может появятся какие-нибудь подробности, детали, результаты пока еще далеко.
f.hump вне форума Ответить с цитированием
Старый 02.08.2013, 00:04   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
есть мнение, что Beermonza был прав: читать у кого более полиморфный или инкапсулированный, в теме про создание игры, не особо интересно. особенно принимая во внимание, что в главной истории пока пишется только абстракт и введение, и до основной части, в которой может появятся какие-нибудь подробности, детали, результаты пока еще далеко.
я бы выделил этото оффтоп в отдельную тему в свободное общение.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.08.2013, 06:20   #8
intmain
Играюсь с Python
Форумчанин
 
Аватар для intmain
 
Регистрация: 12.12.2012
Сообщений: 340
По умолчанию

Цитата:
А это не оверхед, не?
Не, а что выдумаете делает С++ в этом случае, он просто скрывает от вас многое под капотом.

Цитата:
А что касается инкапсуляции, то почему вы решили, что она вообще есть в С?
А какой авторитетный человек на которого вы явно кивнете сказал что ее там нет?

Цитата:
ибо разбиение на заголовочный файл и файл с имплементацией есть и в С++
Да не о нем речь, там вообще всего понагорожено и многия штуки есть.

Цитата:
Как раз про Вашу ситуацию - попытках писать в сущностях с++, выражая их на си и будет
Ха, это с вашей колокольни так кажется. Вы просто погрязли по уши в ооп и любое поползновение в него же со стороны других языков, которые не имеют как казалось бы очевидных средств для реализации этого самого ооп, расценивается вами как неуместное использование. Это все глупость, в первую очередь вы должны сомневаться в авторитетах которые вам будут навязывать это. Писать можно хоть как и на чем угодно, Си достаточно гибок в этом отношении. К тому же что представляет итоговый скомпилированный код что на С, что на С++ ? Как не линейный набор команд с переходами.

Цитата:
есть мнение
Извините кто ведет тему? Гром или Beermonza.
И что совсем недавно он написал?
Цитата:
Вообще, я совершенно не против обсуждения и всяческого фидбека в этой теме, это одна из ее главных целей, помимо собственно дневника.
Что за нас модератор вообще будет все решать что можно, а что нет?
Матов тут нет пропаганды чего-то запрещенного тоже нет. Что за истерическая педантность за чистоту тем?

Цитата:
тему в свободное общение.
Это кладбище идей, где они бьются в последних конвульсиях)

зы. Гром, извиняюсь за многия быквы, но мне кажется годный фидбек получается.
Что ел то - в долг, что жил то - зря.
Для избранных. ))
Секретные разработки
intmain вне форума Ответить с цитированием
Старый 02.08.2013, 06:38   #9
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Можно в принципе и в Сях инкапсулировать что-то внутри модуля (когда интерфейс находится в 1.h, а в 1.c подключается 1_impl.h). Если не давать пользователю ничего, кроме 1.h, то тоже вполне себе черный ящик получится. Хотя в плюсах действительно инкапсуляция, как один из столпов ООП, обычно применяется именно к классам.

А насчет полиморфизма ничего не скажу, поскольку на Си писал мало, и с ним не сталкивался. Скорее всего, явно он там не поддерживается, и поэтому мало кто "пытаться писать на С++ с помощью С". Со своей идеологией в чужой язык ходить - это только велосипеды строить, которые будут очень корявыми и осложнены большими накладными расходами.

Цитата:
я бы выделил этото оффтоп в отдельную тему в свободное общение.
Действительно, а то разговор уже совсем от темы отошел.

Цитата:
По теме - внимательно читаю, отмечаю для себя важные крупицы, но сказать пока нечего ) так что удачи и ровной дороги вперёд !
Спасибо!
Скоро наконец уже более предметный разговор пойдет.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же

Последний раз редактировалось Гром; 02.08.2013 в 06:53.
Гром вне форума Ответить с цитированием
Старый 02.08.2013, 06:52   #10
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
Вообще, я совершенно не против обсуждения и всяческого фидбека в этой теме, это одна из ее главных целей, помимо собственно дневника.
Ну ок, конкретизирую. Всяческого фидбека по поводу данного проекта. Хотя это ведь и так понятно, не? Непонятно, как рассуждения по поводу инкапсуляции в Си помогут сделать игру, которая пишется на плюсах, лучше? Тем более когда читатель темы не столько делится своим мнением, сколько интересуется мнением автора топика? Какой же это фидбек?

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

А в каком-нибудь другом топике эту тему обсудить - ради бога. Для этого форум и предназначен, вопрос вполне дискуссионный. Хотя в этой теме и является оффтопиком.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ инкапсуляция классы Praud Помощь студентам 11 16.05.2013 21:52
Инкапсуляция keksik Общие вопросы Delphi 1 06.04.2012 20:21
Инкапсуляция 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