![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| zzkoderzzzx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 1.10.2013 Репутация: нет Всего: нет |
Известно, что надо всегда делать деструктор виртуальным.
Тем не менее он не становится виртуальным без участия программиста. Значит разработчиками С++ была предусмотрена ситуация, когда есть необходимость в невиртуальном деструкторе. Какие вы можете привести примеры таких ситуаций? |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| zzkoderzzzx |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 1.10.2013 Репутация: нет Всего: нет |
STL использует классы, но при этом нарушает все парадигмы ООП. Поэтому пример не очень хороший. Добавлено @ 16:41
В настоящих ОО-языках все методы виртуальные. Это сообщение отредактировал(а) zzkoderzzzx - 16.10.2013, 16:42 |
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
что значит нарушает? Код STL вообще не обьектно ориентированный. вызов виртуального метода имеет накладные расходы и далеко не всегда имеет смысл делать функцию виртуальной. все методы виртуальны в Java, но скажем в C# такого нет. Это сообщение отредактировал(а) azesmcar - 16.10.2013, 16:57 |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
да, но далеко не всегда нужно применять ООП -------------------- Обижено школьников: 8 |
|||
|
||||
| zzkoderzzzx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 1.10.2013 Репутация: нет Всего: нет |
не ОО код значит плохой код Это сообщение отредактировал(а) zzkoderzzzx - 16.10.2013, 16:59 |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
-------------------- Обижено школьников: 8 |
|||
|
||||
| NoviceF |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: нет Всего: 2 |
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
О как. Давай-ка по пунктам, на примере std::vector, расскажи какие-такие "парадигмы" ООП нарушаются. Это сообщение отредактировал(а) vinter - 16.10.2013, 17:24 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
||||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
с этого места поподробнее, что именно нарушается определение настоящего ООЯ в студию плиз расскажите это Кнуту и Вирту Деструктор должен быть виртуальным, если предполагается (позволяется) наследование. Даже при "чиста ОО" подходе далеко не все классы должны иметь наследников. С++ мультипарадигмный язык, в нем необязателен тезис "все есть объект", так что делать все деструкторы виртуальными неразумно. |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Можно было бы сразу призвать в этот топик санитаров, но пойдём более конструктивным путём.
Откуда, уважаемый, дровишки? Вы где всего этого, мягко скажем, бреда поначитались? Нам бы знать, так сказать, на будущее. -------------------- |
|||
|
||||
| zzkoderzzzx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 1.10.2013 Репутация: нет Всего: нет |
1. protected члены-данные нарушают принцип инкапсуляции в классах-наследниках 2. нельзя полноценно наследовать классы от vector за счет невиртуального деструктора 3. нет виртуальных методов, а следовательно и полиморфизма Основные 3 принципа ООП нарушены. Можно добавить замечание про код с макросами, бессмысленными названиями, чрезмерным использованием символа _ (часто встречается даже __ ). Такой код практически нигде не пройдет code review . |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Нельзя наследоваться потому, что он для этого не предназначен. Неужели ты думаешь, что любой класс предназначен для наследования? Открою тебе секрет. Весь STL построен на полиморфизме Полиморфизм это не виртуальные функции. Виртуальные функции всего лишь один из методов для реализации динамического полиморфизма. |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
zzkoderzzzx, дело в том, что не каждый объект является промежуточным звеном, есть и конечные звенья. Поэтому не каждый объект должен быть базой для другого объекта и это не нарушает принципы ОО нисколько. Полиморфизм и наследование не являются обязательным атрибутом объекта, а, скорее, языка на котором можно или нельзя описать объект с точки зрения ООП. Насчёт protected я, частично, согласен. Это ослабление правил, но и ООП не доктрина ;)
Всё это сделано сознательно, т.к. для разработчиков библиотек зарезервированы имена типа __Upper*. Они не являются частью интерфейса, а значит не могу рассматриваться в контексте какой бы то ни было парадигмы. |
|||
|
||||
| zzkoderzzzx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 1.10.2013 Репутация: нет Всего: нет |
Это сказано не про парадигмы ООП, а про общее качество кода. Такой стиль не удовлетворяет Microsoft coding standard, а также стандартам кодирования, принятым в других организациях. Это сообщение отредактировал(а) zzkoderzzzx - 16.10.2013, 20:25 |
|||
|
||||
| zzkoderzzzx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 1.10.2013 Репутация: нет Всего: нет |
Вот например статья на эту тему http://forum.sources.ru/index.php?showtopic=293695 |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Неочевидно, даже близко (и не прочитав статью).
ООП не более чем шаг к индустрии, и должен рассматриваться только с этой точки зрения. В рамках этого шага. Если же переходить ab ovo, то всё это лишь подвид математических вычислений. И если применимы понятия "плохой" и "хороший" с точки зрения эстетики, то там определяется всё логикой и математическими "привычками". -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
а где именно? давайте посмотрим им в лицо - мужественным людям, отказавшимся от STL (кстати, что они используют, не MFC ли?) это ты про дефайны? загляни в стандартные мелкософтовские заголовки... или они самим себе запрещают свои заголовки использовать? забор, да еще многабукф. но принципа ради поискал, где сказано, что не ОО это плохо. не нашел. |
|||
|
||||
| azesmcar |
|
||||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Во первых давайте четко различать авторитетную литературу и написанное на заборе. Покажи авторитетный источник информации а не статью никому неизвестного автора. Тот же Степанов, создатель stl и generic программиривания, вообще не признает объектно-ориентировааный подход
Ооп всего лишь одна из методологий и не надо думать, что она единственно верная. Есть и другие подходы и другие мнения на этот счет, причем мнения авторитетных людей подкрепленные опытом и знанием. Добавлено через 2 минуты и 29 секунд По поводу стиля с подчеркиваниями: это зарезервированные имена как уже заметили выше, а неоправданных макросов в стл я не припомню. Добавлено через 3 минуты и 9 секунд
Я тоже кстати не нашел Добавлено через 5 минут и 13 секунд
Интересно а реализация стл поставляемая с visual studio тоже не пройдет у н х ревью? |
||||||||||
|
|||||||||||
| codemonkeys |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 17.10.2013 Репутация: нет Всего: нет |
Там сказано хороший код это ОО код. Значит не ОО код - плохой. Добавлено через 6 минут и 11 секунд
По идее не должна пройти, но как то прошла. Индусам видимо было в лом писать свой СТЛ, и они взяли опенсорс реализацию без кодревью : вроде работает и х** с ним. |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
||||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Я все не прочитал, но по моему там написано, что ОО код - это хороший код. А это не тоже самое, что хороший код - ОО код. Mercedes - хорошая машина, но хорошая машина не обязательно только Mercedes. Аналогия понятна. Тем не менее я уверен, что найдешь кучу статей в интернете написанных на форумах и в блогах о том, что ООП - класс, все остальное отстой Я же говорю о том, что для доказательства надо оперировать материалом авторов, пользующимся авторитетом в мире программирования, а не ссылками на блоги никому неизвестных авторов. Тот же boost не имеет ничего общего с OOP, но тем не менее
|
|||
|
||||
| VSB |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 113 Регистрация: 23.8.2007 Репутация: 1 Всего: 2 |
Ошибаетесь Изначально код STL был куплен у Dinkumware, сейчас он пишется в самой MS, и его мейнтейнер - Stephan T. Lavavej |
|||
|
||||
| Zadnica |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 18.10.2013 Репутация: нет Всего: нет |
Сути это не меняет. Купили код у какой то г*вноконторы, поэтому он такой х*ёвый. Добавлено через 12 минут и 53 секунды
Не смеши. В STL и нормального наследования то нет -иерархии не больше 3 классов, не говоря о множественном наследовании, о полиморфизме и речи не идет. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
Zadnica, может сначала поизучать? полиморфизм разный бывает. чего нет в шаблонах С++, так это полиморфизма подтипов (видимо в угоду простоте концепции и скорости компиляции), хотя вполне могли бы быть в виде концепций. Вероятно скоро будут. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Zadnica,
Почитай для начала что такое полиморфизм. |
|||
|
||||
| Zadnica |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 18.10.2013 Репутация: нет Всего: нет |
Шаблоны не истинный ОО-полиморфизм, это всего лишь обёртка над макросами С.
|
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |