Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Рассуждал о том как правильно должен быть определён класс. Класс это прежде всего тип данных, и этот тип данных будет входить в уже сформированную систему типов языка программирования (в данном конкретном случае языка С++). Насколько я понимаю, язык С++ имеет статическую типизацию, что позволяет программистам наверняка исключить определённые виды поведения. Знаю о том, что существует так называемая расширенная статическая проверка. Но я нашёл очень мало материала по данном вопросу именно в контексте С++. Знаю, что существуют и другие алгоритмы проверки типов. В связи с чем, у меня возникли следующие вопросы: 1. Согласно стандарту, при создании пользовательского типа данных(класса), в том случае если явно не определены функции члена из множества special member functions, то весь набор этих методов(их 6, если не ошибаюсь) определяется неявно, и могут использоваться в дальнейшем. 1.1. Мне кажется, что правильнее было бы явно определять явно некоторое множество функций-членов и др. составляющих класса, независимо от того, планируется ли использовать тот или иной элемент класса на момент создания класса. Есть ли доля истины в таких рассуждениях ? 1.2. Как обычно поступаете вы при создании своих типов данных(классов) ? 2. Какими инструментами вы пользуетесь на практике для проверки того, что вы правильно спроектировали новый тип данных(класс) ? 3. Как дорого может стоит ошибка при проектировании того или иного класса ? 4. Всегда ли вы используете обобщённое программирование когда его можно использовать, и какие подводные камни в контексте системы типов языка С++ оно может дать ? Подскажите пожалуйста своё мнение по этим вопросам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 09:45 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
1.1 - почему это здесь, а не в почте Страуструпа? А уж если бы тот ответил, то и сюда можно было бы запостить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 11:36 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.1. Мне кажется, что правильнее было бы явно определять явно некоторое множество функций-членов и др. составляющих класса, независимо от того, планируется ли использовать тот или иной элемент класса на момент создания класса. Есть ли доля истины в таких рассуждениях ?бессмысленная трата времени и сил. Зачем писать код, который никогда не будет исполняться? Потом тестировать его ещё. Лучше потратить время на что-то более полезное. Единственное, что надо явно определять - так это конструктор копирования и оператор присваивания для тех классов, где такие операции имеют смысл, и явно их запрещать, если не имеют. А то компилятор там сам нагенерит чего-то, ищи потом, откуда все эти странные ошибки лезут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 12:27 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПодскажите пожалуйста своё мнение по этим вопросам Пользуйтесь готовыми классами и шаблонами. Проектирование классов не относится к C++. Хорошее средство для проектирования - UML. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2015, 13:52 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercury1.1. Мне кажется, что правильнее было бы явно определять явно некоторое множество функций-членов и др. составляющих класса, независимо от того, планируется ли использовать тот или иной элемент класса на момент создания класса. Есть ли доля истины в таких рассуждениях ?бессмысленная трата времени и сил. Зачем писать код, который никогда не будет исполняться? Потом тестировать его ещё. Лучше потратить время на что-то более полезное. Единственное, что надо явно определять - так это конструктор копирования и оператор присваивания для тех классов, где такие операции имеют смысл, и явно их запрещать, если не имеют. А то компилятор там сам нагенерит чего-то, ищи потом, откуда все эти странные ошибки лезут. Вот, вы говорите о конструкторе копирования и операторе присваивания, то есть вы уже выделяете какой-то минимум. Я об этом минимуме и спрашиваю. Одно дело когда мы определяем классы для решения конкретных задач здесь и сейчас, при этом эти задачи нетрудозатратны, не требуют большого числа классов, и классы, мы вполне возможно используем следуя некоторым тенденциям и по той причине, что мы возможно понимаем что использование собственных типов данных логично и должно присутствовать, мы начинаем думать в объектно-ориентированном стиле. Другой вопрос, когда идёт разработка серьёзных больших проектов, где мы определяем не менее, например, 20 собственных типов и плюс ещё какие-то другие критерии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2015, 01:55 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
mcureenab Проектирование классов не относится к C++. Хорошее средство для проектирования - UML. UML тут совершенно не причём. Это только вспомогательное средство ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2015, 02:01 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВот, вы говорите о конструкторе копирования и операторе присваивания, то есть вы уже выделяете какой-то минимум. Я об этом минимуме и спрашиваю.так это и есть необходимый и достаточный минимум. Проистекает он из практической необходимости контролировать код, а не полагаться на правильность автоматической генерации его компилятором. Кстати говоря, если класс не должен быть копируемым, тела этих методов писать не нужно. Достаточно написать их сигнатуры в секции private. Этот вопрос хорошо разобран у Скота Майерса в его Эффективном использовании С++ . И не только этот. Настоятельно рекомендую прочитать, ибо - классика. SashaMercuryОдно дело когда мы определяем классы для решения конкретных задач здесь и сейчас, при этом эти задачи нетрудозатратны, не требуют большого числа классов, и классы, мы вполне возможно используем следуя некоторым тенденциям и по той причине, что мы возможно понимаем что использование собственных типов данных логично и должно присутствовать, мы начинаем думать в объектно-ориентированном стиле. Другой вопрос, когда идёт разработка серьёзных больших проектов, где мы определяем не менее, например, 20 собственных типов и плюс ещё какие-то другие критериичем больше проект, тем больше кода необходимо написать, оттестировать а потом сопровождать, по моему - это логично. Следовательно, тратить силы и время на функции, которые никогда не будут исполняться в программе это не только зря потраченное время, но и ещё и вредно, потому что усложняет дальнейшую поддержку и сопровождение проекта. Вообще говоря, понимание того, что класс в С++ - это синоним типа, не приносит особой практической пользы. Для теоретических рассуждений, возможно, это важно, а для практики несущественно. Имхо. PS в текущем проекте только в пространстве имён dbinterface я сейчас насчитал сейчас более 100 классов, а он не то чтобы очень уж крупный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2015, 11:43 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
egorych, спасибо за книгу, но я не нашёл в ней ответы на все вопросы. К сожалению. И у BS их нет, и в стандарте. Может быть плохо ищу. Не знаю. Очень интересно было бы почитать про проектирование типов не в контексте того как правильно использовать тот или иной инструмент, а в контексте того как правильно проектировать и моделировать собственные типы данных на С++. Уже несколько дней думаю об этом в целом, и о базовых классах в частности, но пока никаких выводов не сделал. Может быть есть ещё какая-то хорошая литература ? Марк давно грозился сделать раздел с литературой, кстати ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2015, 12:12 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
У меня много мыслей по разделам литературы. Но они выходят далеко за рамки С++ и SQL.ru. В частности для любой книги важно - наличие полного скрина обложки - качества принта. Твёрдая/мягкая обложка. Переплёт. - для "книжной барахолки" важно указание состояния книги. - указания года издания - скана оглавления - точных сведений о переводе для иностранной литературы. Кто переводчик. - пользовательских рецензий - рейтинги и спрос. Ссылки на магазины. - хеш теги для поиска. К сожалению тот формат в котором подаётся инфа о книгах здесь - весьма неудовлетворителен. Списки вида "Название-Афтор" не несут никакой полезной нагрузки для читателя. Поэтому если раздел литературы и будет - то его нужно 100% модерировать. А это означает резать и удалять безсмысленные публикации и флуд ниочём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2015, 14:41 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
по поводу явного определения, по-моему новый стандарт ответил на вопросы :) я про =default и =delete ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2015, 14:51 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
alexy_black, видел как нужно подавать информацию о книге выше? Отредактировано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2015, 14:53 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
alexy_blackпо поводу явного определения, по-моему новый стандарт ответил на вопросы :) я про =default и =delete Это тут совершенно ни при чём ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 01:42 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
SashaMercurymcureenabПроектирование классов не относится к C++. Хорошее средство для проектирования - UML. UML тут совершенно не причём. Это только вспомогательное средство Ты спрашиваешь "2. Какими инструментами вы пользуетесь на практике для проверки того, что вы правильно спроектировали новый тип данных(класс) ?" и говоришь, "не при чем".... Невозможно проектировать без языка. UML поддерживает анализ задачи от неформального описания, до генерации кода и развертывания на производственной площадке. Т.е. можно проследить и реализацию требований и то где и как будет жить объект на реальном оборудовании. Генерация классов C++ из моделей UML - формальная процедура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2015, 09:14 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
mcureenab, в какой среде вы строите UML ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2015, 09:09 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
Сегодня кое-что смотрел у Павловской, в её книге по языку С++ также есть раздел именуемый: "Рекомендации по составу класса". В нём она перечисляет: 1. Конструкторы 2. Набор методов, реализующих свойства класса\ 3. Набор операций позволяющий копировать, сравнивать ..., и производить другие действия, требующиеся по сути класса 4. Класс исключений (это вообще отдельная и большая тема) Вот и я про то же спрашивал. Минимальный набор требуемый по сути класса, по сути того, что такое класс (не может быть снеговик без морковки и ведра, например). Ну ладно, что-то нашёл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2015, 09:14 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
SashaMercurymcureenab, в какой среде вы строите UML ? StarUML. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2015, 09:41 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
mcureenab, спасибо, сегодня вечером посмотрю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2015, 09:49 |
|
||
|
Полнота пользовательских типов данных в контексте системы типов С++ и др. (без оффтопа)
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Ваши вопросы в плоскости расположенной над языком. Язык С++ самодостаточен, ибо отшлифовался годами(в прочем как и другие языки программирования). Каждый язык решает свои задачи и си плас плас не исключение. Для понимания где и как применять язык си плас плас - есть замечательная и единственная технология отвечающая на данный вопрос, относительно самой поставленной задачи. Это Объектно Ориентированная разработка. Именно она отвечает на те вопросы, что задаёте Вы тут. с уважением (круглый) ЗЫ Книгу, альма-матер по ОО, всё-таки напишу:) Гради Буч "Объектно-Ориентированный Анализ и Проектирование" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2015, 15:02 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=39&tid=2018679]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
48ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 280ms |
| total: | 450ms |

| 0 / 0 |
