powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
19 сообщений из 19, страница 1 из 1
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39094928
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Рассуждал о том как правильно должен быть определён класс. Класс это прежде всего тип данных, и этот тип данных будет входить в уже сформированную систему типов языка программирования (в данном конкретном случае языка С++). Насколько я понимаю, язык С++ имеет статическую типизацию, что позволяет программистам наверняка исключить определённые виды поведения. Знаю о том, что существует так называемая расширенная статическая проверка. Но я нашёл очень мало материала по данном вопросу именно в контексте С++. Знаю, что существуют и другие алгоритмы проверки типов. В связи с чем, у меня возникли следующие вопросы:
1. Согласно стандарту, при создании пользовательского типа данных(класса), в том случае если явно не определены функции члена из множества special member functions, то весь набор этих методов(их 6, если не ошибаюсь) определяется неявно, и могут использоваться в дальнейшем.
1.1. Мне кажется, что правильнее было бы явно определять явно некоторое множество функций-членов и др. составляющих класса, независимо от того, планируется ли использовать тот или иной элемент класса на момент создания класса. Есть ли доля истины в таких рассуждениях ?
1.2. Как обычно поступаете вы при создании своих типов данных(классов) ?
2. Какими инструментами вы пользуетесь на практике для проверки того, что вы правильно спроектировали новый тип данных(класс) ?
3. Как дорого может стоит ошибка при проектировании того или иного класса ?
4. Всегда ли вы используете обобщённое программирование когда его можно использовать, и какие подводные камни в контексте системы типов языка С++ оно может дать ?
Подскажите пожалуйста своё мнение по этим вопросам
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39095057
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.1 - почему это здесь, а не в почте Страуструпа? А уж если бы тот ответил, то и сюда можно было бы запостить.
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39095152
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1.1. Мне кажется, что правильнее было бы явно определять явно некоторое множество функций-членов и др. составляющих класса, независимо от того, планируется ли использовать тот или иной элемент класса на момент создания класса. Есть ли доля истины в таких рассуждениях ?бессмысленная трата времени и сил. Зачем писать код, который никогда не будет исполняться? Потом тестировать его ещё. Лучше потратить время на что-то более полезное.
Единственное, что надо явно определять - так это конструктор копирования и оператор присваивания для тех классов, где такие операции имеют смысл, и явно их запрещать, если не имеют. А то компилятор там сам нагенерит чего-то, ищи потом, откуда все эти странные ошибки лезут.
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39095284
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryПодскажите пожалуйста своё мнение по этим вопросам Пользуйтесь готовыми классами и шаблонами.

Проектирование классов не относится к C++. Хорошее средство для проектирования - UML.
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39096022
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychSashaMercury1.1. Мне кажется, что правильнее было бы явно определять явно некоторое множество функций-членов и др. составляющих класса, независимо от того, планируется ли использовать тот или иной элемент класса на момент создания класса. Есть ли доля истины в таких рассуждениях ?бессмысленная трата времени и сил. Зачем писать код, который никогда не будет исполняться? Потом тестировать его ещё. Лучше потратить время на что-то более полезное.
Единственное, что надо явно определять - так это конструктор копирования и оператор присваивания для тех классов, где такие операции имеют смысл, и явно их запрещать, если не имеют. А то компилятор там сам нагенерит чего-то, ищи потом, откуда все эти странные ошибки лезут.

Вот, вы говорите о конструкторе копирования и операторе присваивания, то есть вы уже выделяете какой-то минимум. Я об этом минимуме и спрашиваю.

Одно дело когда мы определяем классы для решения конкретных задач здесь и сейчас, при этом эти задачи нетрудозатратны, не требуют большого числа классов, и классы, мы вполне возможно используем следуя некоторым тенденциям и по той причине, что мы возможно понимаем что использование собственных типов данных логично и должно присутствовать, мы начинаем думать в объектно-ориентированном стиле. Другой вопрос, когда идёт разработка серьёзных больших проектов, где мы определяем не менее, например, 20 собственных типов и плюс ещё какие-то другие критерии
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39096023
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab
Проектирование классов не относится к C++. Хорошее средство для проектирования - UML.

UML тут совершенно не причём. Это только вспомогательное средство
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39096355
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВот, вы говорите о конструкторе копирования и операторе присваивания, то есть вы уже выделяете какой-то минимум. Я об этом минимуме и спрашиваю.так это и есть необходимый и достаточный минимум. Проистекает он из практической необходимости контролировать код, а не полагаться на правильность автоматической генерации его компилятором.
Кстати говоря, если класс не должен быть копируемым, тела этих методов писать не нужно. Достаточно написать их сигнатуры в секции private. Этот вопрос хорошо разобран у Скота Майерса в его Эффективном использовании С++ . И не только этот. Настоятельно рекомендую прочитать, ибо - классика.

SashaMercuryОдно дело когда мы определяем классы для решения конкретных задач здесь и сейчас, при этом эти задачи нетрудозатратны, не требуют большого числа классов, и классы, мы вполне возможно используем следуя некоторым тенденциям и по той причине, что мы возможно понимаем что использование собственных типов данных логично и должно присутствовать, мы начинаем думать в объектно-ориентированном стиле. Другой вопрос, когда идёт разработка серьёзных больших проектов, где мы определяем не менее, например, 20 собственных типов и плюс ещё какие-то другие критериичем больше проект, тем больше кода необходимо написать, оттестировать а потом сопровождать, по моему - это логично. Следовательно, тратить силы и время на функции, которые никогда не будут исполняться в программе это не только зря потраченное время, но и ещё и вредно, потому что усложняет дальнейшую поддержку и сопровождение проекта.

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

PS в текущем проекте только в пространстве имён dbinterface я сейчас насчитал сейчас более 100 классов, а он не то чтобы очень уж крупный.
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39110079
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych,
спасибо за книгу, но я не нашёл в ней ответы на все вопросы. К сожалению. И у BS их нет, и в стандарте. Может быть плохо ищу. Не знаю.

Очень интересно было бы почитать про проектирование типов не в контексте того как правильно использовать тот или иной инструмент, а в контексте того как правильно проектировать и моделировать собственные типы данных на С++. Уже несколько дней думаю об этом в целом, и о базовых классах в частности, но пока никаких выводов не сделал. Может быть есть ещё какая-то хорошая литература ?
Марк давно грозился сделать раздел с литературой, кстати
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39110189
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня много мыслей по разделам литературы. Но они выходят далеко за рамки С++ и SQL.ru.

В частности для любой книги важно
- наличие полного скрина обложки
- качества принта. Твёрдая/мягкая обложка. Переплёт.
- для "книжной барахолки" важно указание состояния книги.
- указания года издания
- скана оглавления
- точных сведений о переводе для иностранной литературы. Кто переводчик.
- пользовательских рецензий
- рейтинги и спрос. Ссылки на магазины.
- хеш теги для поиска.

К сожалению тот формат в котором подаётся инфа о книгах здесь - весьма неудовлетворителен.
Списки вида "Название-Афтор" не несут никакой полезной нагрузки для читателя.

Поэтому если раздел литературы и будет - то его нужно 100% модерировать. А это означает
резать и удалять безсмысленные публикации и флуд ниочём.
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39110202
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по поводу явного определения, по-моему новый стандарт ответил на вопросы :)
я про =default и =delete
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39110204
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_black, видел как нужно подавать информацию о книге выше?

Отредактировано.
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39110530
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackпо поводу явного определения, по-моему новый стандарт ответил на вопросы :)
я про =default и =delete

Это тут совершенно ни при чём
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39110584
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurymcureenabПроектирование классов не относится к C++. Хорошее средство для проектирования - UML. UML тут совершенно не причём. Это только вспомогательное средство
Ты спрашиваешь "2. Какими инструментами вы пользуетесь на практике для проверки того, что вы правильно спроектировали новый тип данных(класс) ?" и говоришь, "не при чем"....

Невозможно проектировать без языка. UML поддерживает анализ задачи от неформального описания, до генерации кода и развертывания на производственной площадке. Т.е. можно проследить и реализацию требований и то где и как будет жить объект на реальном оборудовании.

Генерация классов C++ из моделей UML - формальная процедура.
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39129346
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab, в какой среде вы строите UML ?
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39129350
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня кое-что смотрел у Павловской, в её книге по языку С++ также есть раздел именуемый: "Рекомендации по составу класса". В нём она перечисляет:
1. Конструкторы
2. Набор методов, реализующих свойства класса\
3. Набор операций позволяющий копировать, сравнивать ..., и производить другие действия, требующиеся по сути класса
4. Класс исключений (это вообще отдельная и большая тема)

Вот и я про то же спрашивал. Минимальный набор требуемый по сути класса, по сути того, что такое класс (не может быть снеговик без морковки и ведра, например). Ну ладно, что-то нашёл
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39129369
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurymcureenab, в какой среде вы строите UML ? StarUML.
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39129375
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab, спасибо, сегодня вечером посмотрю
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39129846
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

Ваши вопросы в плоскости расположенной над языком. Язык С++ самодостаточен, ибо отшлифовался годами(в прочем как и другие языки программирования). Каждый язык решает свои задачи и си плас плас не исключение.

Для понимания где и как применять язык си плас плас - есть замечательная и единственная технология отвечающая на данный вопрос, относительно самой поставленной задачи. Это Объектно Ориентированная разработка. Именно она отвечает на те вопросы, что задаёте Вы тут.

с уважением
(круглый)
ЗЫ
Книгу, альма-матер по ОО, всё-таки напишу:)
Гради Буч
"Объектно-Ориентированный Анализ и Проектирование"
...
Рейтинг: 0 / 0
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
    #39130221
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0,
Тимоти Бад получше будет, хоть и немного на другую тему... но более полезно.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]