0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 17
|
||||||
1 | ||||||
Инкапсулировать без серьезного изменения..возможно ли?07.02.2011, 22:15. Показов 6406. Ответов 90
Метки нет (Все метки)
собственно это кольцевая очередь, на которой у меня построено уже 4 след лабы.Пошел сегодня сдавать - препод ткнул рукой в не инкапсулированный public: list_block* next; из class list_block в самом начале. И говорит, пока не перепишешь все так, чтоб он был в привате - не приму. А там куча операций присваивания и считывания через (->) из class circle_list и его сына quene. Причем фрэнды использовать запретила. НА все мои возражения только кивает *овца(( Во общем, как малой кровью вбахать эту глупость в приват и иметь к ней нормальный доступ отовсюду? что не переписывать еще 5 таких лаб в хз скольких меcтах ?..
0
|
07.02.2011, 22:15 | |
Ответы с готовыми решениями:
90
Событие изменения содержимого страницы без изменения адреса и перезагрузки страницы Возможно ли изменения счётчика Возможно ли в IDLE применить изменения, не закрывая всех окон? Возможно Ли Внести Изменения В Дизайн Только Конкретных Почтовых Баз |
10.02.2011, 23:41 | 61 |
Страуструп "Стиль программирования С++".
P.S. кстати на момент написания поста я не видел вашего сообщения. Скажите это фирме Борланд. Все property в классах компонентов в дельфи сделаны по этому принципу. Знаете почему? Множественное наследование.
0
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
10.02.2011, 23:43 | 62 |
Если в моих рассуждениях есть ошибка, то укажи на неё, в противном случае я прав, а ты, следовательно, не прав.
Добавлено через 45 секунд Predator_2004, а мы тут про делфи? Извини, не просёк! Добавлено через 43 секунды А, и ещё номер страницы из Страуструпа.
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
10.02.2011, 23:45 | 63 |
Если мы говорим о структурах, то ничем. Структуры лишь предоставляют клиентам данные и не должны иметь хоть какие-то осмысленные функции. Объекты же предоставляют клиентам функции, для выполнения которых, возможно, используются тщательно скрытые за абстракциями данные. Поэтому никакой речи об открытых данных или методах установки/получения данных(сеттеров/геттеров) в случае объектов речи быть не может. Если объект предоставляет клиентам и данные(геттеры/сеттеры) и функции, то он спроектирован неверно.
0
|
10.02.2011, 23:47 | 64 |
Поправка:"Язык программирования с++" со стр 122. Особое внимание с 124.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
11.02.2011, 00:15 | 65 | |||||
volovzi, А вам кто-то говорил разве, что класс некорректен, если его подкласс (узел списка к примеру) является структурой, но заключен в приватную часть класса?
Читая ваши сообщения у меня такое ощущение, что вы пытаетесь доказать правильность конструкции типа
0
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
11.02.2011, 00:21 | 66 |
Структура ничем не отличается от класса кроме того, что в структуре все методы и переменные по-умолчанию открыты, а в классе закрыты (и ещё одна деталь, про которую говорил MrX, и которая к теме не имеет отношения). Сделано это для совместимости с языком Си. В остальном это одно и то же.
В этой теме я уже приводил пример класса из СБШ, в котором переменные открыты. Собственно, я веду к тому, что «предоставляемый интерфейс» — это не обязательно функции. Открытые переменные — это тоже предоставляемый интерфейс, при этом, если точно известно, что изменение значений переменных происходит «просто», то есть не нужно проводить какой-то фильтрации или дополнительных действий, то этот интерфейс является наиболее лаконичным и органичным. Посмотрю.
0
|
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 17
|
|
11.02.2011, 00:23 [ТС] | 67 |
=((
черт..перечитал.. вроде все понял, но ну действительно, чем мой бедный class list_block отличается от std:air и там и там нужные переменные для работы класса закидываются напрямую через равно и все живы и здоровы. И вроде как я таких как этот классов несколько точно встречал. в чем кардинальное различие,? это еще может не в тему. Но в C# вообще в каждом втором классе так делают. Но там наверно парадигма другая.. вообще, тогда по вашему выходит, что переменных в паблике как таковых быть не должно НИКАКИХ?
0
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
11.02.2011, 00:24 | 68 |
ForEveR, ты либо очень невнимательно читаешь, либо издеваешься. Я в этой теме уже много раз очень доходчиво объяснял, как я предлагаю делать в данном случае, и даже приводил краткий пример.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
11.02.2011, 00:28 | 69 | |||||
volovzi, А разве с вами кто-то спорил, что это плохо?
0
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
11.02.2011, 00:32 | 70 |
ForEveR, ну да, собственно об этом со мной и спорят. Про next/prev и речи не было, потому что у автора они как раз защищены.
Добавлено через 51 секунду Стоп, я вообще ничего не понял. Добавлено через 56 секунд Ты о чём? Я как раз утверждаю, что next/prev и value узла списка вполне могут быть открытыми. Добавлено через 57 секунд А вот head/tail уже надо закрывать, потому что доступ к ним более сложен, чем к данным узла.
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
11.02.2011, 00:37 | 71 |
С точки зрения C++ верно, с концептуально точки зрения - нет.
pair и _List_node_base - структуры, назначение которых, как было сказано выше, заключается в предоставлении данных. Обязательно. Посмотрите, например, на интерфейсы языков C# и Java. Во-первых, точно известно может быть только тогда, когда ты пишешь небольшую программу в одиночку. Во-вторых, все может изменится. Сегодня объект выполняет операцию сам, а завтра делегирует выполнение другому объекту.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
11.02.2011, 00:38 | 72 |
volovzi, Тогда объясни какого лешего я должен открывать next/prev в самом списке? Зачем, если я пишу класс с функциями, которых вполне хватает?
0
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
11.02.2011, 00:54 | 73 |
В классе _List_node_base есть и методы, так что это не только данные.
Ты говоришь правильные вещи, но неправильно их понимаешь. Слова «struct» и «class» нужны для удобства программиста. Различаются они только спецификаторами по-умолчанию. «Структура» в твоей терминологии — это в моей терминологии «простой класс», т.е класс, данные в котором используются как есть, поэтому скрывать их и предоставлять к ним функции доступа нет смысла. И при этом не важно, каким словом начинается описание этого класса на самом деле. Наоборот, зачем плодить дополнительные сущности, если можно просто открыть доступ, упростив тем самым и написание, и использование класса.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
11.02.2011, 01:03 | 74 | |||||
volovzi, В STL фишка в используемой концепции. Очень многое там сделано через итераторы.
0
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
11.02.2011, 01:10 | 75 |
Predator_2004, извини, не нашёл места, про которое ты говоришь. Уточни, пожалуйста (у меня «специальное издание» неизвестно какого года выпуска).
Добавлено через 3 минуты Спасибо, просвятил . Кстати, твой пример нисколько не запрещает мне «свалить» код при помощи тех же сеттеров, если мне очень захочется.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
11.02.2011, 01:11 | 76 |
Список - сущность. Цитата, тоже не дословная... Если вы видите нечто как сущность, сделайте ее классом.
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
11.02.2011, 01:17 | 77 |
volovzi, , Вы хоть на минуту забудьте про C++ и попробуйте понять, что Вам говорят. Не получится - обратитесь к литературе по ООП.
1
|
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 17
|
|
11.02.2011, 01:19 [ТС] | 78 |
не пользователю!! ну где здесь нарушение инкапсуляции?
0
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
11.02.2011, 01:20 | 79 |
Если такое и есть, то это не более, чем совет, потому что по факту struct — это то же самое, что и class. И здесь тогда я уже не согласен с ним, потому что даже пара значений — это уже некоторая сущность.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||
11.02.2011, 01:22 | 80 | ||||||||||
volovzi, То есть это достаточная сущность?
0
|
11.02.2011, 01:22 | |
11.02.2011, 01:22 | |
Помогаю со студенческими работами здесь
80
Не удалось запустить Windows. Возможно это произошло из-за недавнего изменения оборудования Инкапсулировать класс Веб-программист для серьезного проекта нужны специалисты для серьезного проекта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |