Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » В чем преимущество ООП ?

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10

Открыть новую тему     Написать ответ в эту тему

wasilissk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qraizer
Э-эх, не хотел я с тобой общаться, но читая этот бред не могу молчать.  

Цитата:
Более того, она не обязательна в том виде, каково её определение.  

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

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

Это вообще – пушка. Вода в том виде, как она определяется, на самом деле нафиг не нужна. Она просто удобна, но не необходима. По-настоящему необходимым является лишь оксид водорода, потеря организмом человека более 10 % оксида водорода может привести к его смерти. Для нормального функционирования организма человеку нужно усвоить около 3 литров оксида водорода за день в зависимости от температуры и влажности окружающей среды, физической активности и т. д. Но на самом деле наличие воды в организме не является гарантией высокого уровня его развития.
Ты несешь бред, сам вчитайся в то, что ты пишешь, инкапсуляния это столп ООП и без него никуда не деться, он не лучше и не хуже остальных столпов, это уже не к тебе, а к delover. Но в совокупности этих парадигм ООП  - и есть ООП, не важно что первее, или значимее, но это так. ООП - это наследование, инкапсуляция и полиморфизм, ничего исключать нельзя.

Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 14:52 27-11-2011
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
wasilissk, в книжках пишут всё правильно. Просто там теория, а жизнь богаче.
 

Код:
 
class someClass_impl;
 
class someClass
{
  std::auto_ptr<someClass_Impl> impl;
 
public:
  /* ... */
};
Идиома PImpl. Тут someClass вообще не представляет, из чего он состоит. Всё инкапсулировал никак к нему не относящийся someClass_impl.
 

Код:
template <typename Ch, typename Tr = char_traits<Ch>, template Al = allocator<Ch> >
class basic_string;
Аттрибуты basic_string<> задаются им, но управляются char_traits<>. А allocator<> вообще весёлый. Управление динамической памятью должен уметь осуществять любой экземпляр, в любое время созданный и разрушенный. Все экземпляры обязаны быть взаимозаменяемы. Это возможно только если эти экземпляры не имеют динамического состояния. Вообще. Кто здесь за что отвечает и что инкапсулирует? Только чур долго не думать.
 

Код:
namespace complex_numbers
{
 
class complex
{
  double re, im;
 
public:
  complex();
  complex(const complex&);
  complex(double);
  complex(double, double);
 
  complex& operator= (const complex&);
  complex& operator+=(const complex&);
  complex& operator-=(const complex&);
  complex& operator*=(const complex&);
  complex& operator/=(const complex&);
 
  friend double real();
  friend double imag();
};
 
complex operator+(const complex&, const complex&);
complex operator-(const complex&, const complex&);
complex operator*(const complex&, const complex&);
complex operator/(const complex&, const complex&);
/* ... */
complex sqrt(const complex&);
complex abs(const complex&);
/* ... */
complex sin(const complex&);
complex cos(const complex&);
/* ... */
/* ... */
/* ... */
 
const complex C_ONE(0, 1);
 
} // namespace complex_numbers
Что тут инкапсулировал класс? А что пространство имён? Казалось бы, какое вообще отношение пространства имён имеют к ООП...
 

Код:
struct FILE;
 
FILE* fopen(/*... */);
int fclose(FILE*);
 
size_t fread(/*... */, FILE*);
size_t fwite(/*... */, FILE*);
 
int fprintf(FILE*, /*... */);
int fscanf(FILE*, /*... */);
 
/* ... */
Это ООП? Тут есть инкапсуляция? Тут нет инкапсуляции?
 
Я ж уже намекал, что ни умение читать, ни само по себе чтение умнее не делают, умнее делают анализ прочитанного, ассоциативные и причинно-следственные связи и опыт. Знать недостаточно, требуется понимать то, что знаешь. А так да, goto вредный оператор, правильно учат.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 04:58 28-11-2011 | Исправлено: Qraizer, 05:07 28-11-2011
wasilissk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qraizer
Что из приведенных примеров делает инкапсуляцию не нужной?

Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 08:29 28-11-2011
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Я тоже не буду отвечать. Надоело играть в одни ворота.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 08:23 29-11-2011 | Исправлено: Qraizer, 08:24 29-11-2011
wasilissk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qraizer
Т.е. чтобы ты продолжил свою мысль, необходим мой ответ на вопросы?  
Ok.

Цитата:
Идиома PImpl

Вопроса не увидел.

Цитата:
Кто здесь за что отвечает и что инкапсулирует?

Понятия не имею.

Цитата:
Что тут инкапсулировал класс?

Две переменные и логику опубликованного интерфейса.

Цитата:
А что пространство имён?

Пространство имен ограничило пространство имен. Термин инкапсулирование тут вообще некорректно использовать.

Цитата:
Это ООП? Тут есть инкапсуляция?

Это структура с методами. Есть.
 
Теперь, пожалуйста, что же все таки из приведенного делает инкапсуляцию ненужной?

Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 09:26 29-11-2011
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Прежде чем продолжать, будь добр сначала приведи определение инкапсуляции, которым ты руководствовался, когда отвечал. Только хорошо подумай, ибо определений много, и ни одному мне известному все ответы не соответствуют, только некоторые.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 03:01 02-12-2011 | Исправлено: Qraizer, 03:02 02-12-2011
wasilissk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А здесь ты каким руководствовался?
Qraizer

Цитата:
Более того, она не обязательна в том виде, каково её определение.

 
Я, этим.
Инкапсуляция это множество механизмов разделения кода - отделение реализации от интерфейса. Естественно, что в модульном программировании будет свой набор, в ООП, свой. Методы инкапсуляции в ООП - область видимости внутри класса. Еще инкапсуляцей не в чистом виде является выделение абстрактного класса или объявление интерфейса (в смысле языковой единицы), тут уже предполагается и наследование и полиморфизм.

Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 06:48 02-12-2011
indapublic



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как нас учили в институте преимуществ основных два:
1. Эта концепция в наибольшей степени соответствует внутренней логике операционной системы. Программа, состоящая из отдельных объектов, приспособлена к реагированию на события, происходящие в операционной системе.
  2. Большая надёжность кода и возможность повторного использования отработанных объектов.

Всего записей: 200 | Зарегистр. 05-02-2008 | Отправлено: 17:06 02-12-2011
wasilissk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
indapublic

Цитата:
основных два

На все четыре набралось:

Цитата:
1. Эта концепция в наибольшей степени соответствует внутренней логике операционной системы.
2. Программа, состоящая из отдельных объектов, приспособлена к реагированию на события, происходящие в операционной системе.  
3. Большая надёжность кода  
4. Возможность повторного использования отработанных объектов.
 
И с первыми двумя я бы не согласился.
 
Добавлено:
По меньшей мере необходимо уточнять, что за операционная система и для какого круга задач. А в общем понимании, это не так.

Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 19:53 02-12-2011
indapublic



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возможно, я не спорю. Как на лекции учили, так я и написал. Я в своей практике упор делаю пока на алгоритмическое программирование. Поэтому не проникся ООП в полной мере.

Всего записей: 200 | Зарегистр. 05-02-2008 | Отправлено: 05:04 03-12-2011
indapublic



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, я вспомнил, в лекции речь шла именно про операционную систему Windows

Всего записей: 200 | Зарегистр. 05-02-2008 | Отправлено: 15:01 04-12-2011 | Исправлено: indapublic, 15:02 04-12-2011
salexn1



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
indapublic
особенно проникнуться ООП помогает программа а-ля MS Paint созданная своими руками. Вот тогда начинаешь въезжать, почему  
Object.Draw лучше чем  
if (Object.Type = Circle) then
  DrawCircle(....)
else
if (Object.Type = Rect) then
  DrawRect(....)
 
и т.д.
 
Особенно когда нужно изменить поведение для всех объектов при отрисовке... Скажем, если рисовать только черно-белым или инверсным  цветом...  
Попробуйте процедурным это все написать, а потом ООП...

Всего записей: 502 | Зарегистр. 21-02-2008 | Отправлено: 13:31 05-12-2011
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
salexn1
Верно подмечено: ООП - не панацея от всех проблем (не универсальное средство), а лишь средство для решения определённого множества задач. Глупо ограничивать себя или тем или этим.
 
Есть постановка задачи? Отлично! Оцени масштаб работы и сделай шаг в правильном направлении, а не пытайся копать асфальт лопатой, только потому, что ею ты успешно копал землю.

Всего записей: 767 | Зарегистр. 18-05-2009 | Отправлено: 15:18 05-12-2011
indapublic



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
особенно проникнуться ООП помогает программа а-ля MS Paint созданная своими руками

Это конечно, но нужно оценивать задачу, если необходимо, например, найти площадь круга, то в ООП дольше будешь форму создавать, да ввод-вывод обеспечивать, чем реально решать задачу

Всего записей: 200 | Зарегистр. 05-02-2008 | Отправлено: 19:01 05-12-2011
Erazor84



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ООП не панацея, но для решения большинства типичных задач использование ООП оправдано

Всего записей: 368 | Зарегистр. 22-01-2008 | Отправлено: 12:49 13-06-2014
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Erazor84

Цитата:
ООП не панацея

Именно панацея. ООП позволяет описывать непредсказуемый мир, чем не блещет структурное программирование. Правда когда структурное программирование эмулирует ООП ему это изредка удаётся.

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 22:55 16-06-2014
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
salexn1

Цитата:
особенно проникнуться ООП помогает программа а-ля MS Paint созданная своими руками. Вот тогда начинаешь въезжать

Альтернатива, надо видеть альтернативу и осознать отличия! Я не профи в программировании, много разных языков пощупал. Скажем, есть такой Liberty BASIC. Это ужас, летящий на крыльях ночи! Можно программировать Виндовские окошки, но - предлагается это делать через бесконечные go to. Короче, 100% Spaghetti code. Зато благодаря знакомству с этим языком я, наконец, понял, что означает директива self в Smalltalk: это перевод программы в состояние, в котором она ничего не делает, а только ловит в цикле ввод с клавы и прочие действия юзера!

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 15:59 17-06-2014
alexgala



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто нибудь пробовал работать с TMS Aurelius? , я вообще никогда не сталкивался с ООП, до этого все на паскале + sql. Хочу перейти на другой уровень .

Всего записей: 93 | Зарегистр. 29-08-2011 | Отправлено: 17:48 22-06-2014
xpin2013



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexgala
TMS это не совсем программирование, если меня простят. ООП это определение модели наследования объектов, если быть точнее - полиморфизм делегация и ещё что-то. Инкапсуляция вроде была. Ваши вопросы лучше в  топик с TMS чем сюда.

Всего записей: 291 | Зарегистр. 16-01-2014 | Отправлено: 20:14 25-06-2014
SuPriTo



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
ООП не панацея, но для решения большинства типичных задач использование ООП оправдано

Конечно не панацея, все зависит от профессионализма программиста и его умения пользоваться конкретным инструментом.

Всего записей: 1477 | Зарегистр. 24-03-2009 | Отправлено: 21:30 06-07-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » В чем преимущество ООП ?


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru