imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 15.12.2004, 11:17     # 1
spike
Member
 
Аватар для spike
 
Регистрация: 02.09.2003
Сообщения: 215

spike Молодецspike Молодецspike Молодец
В чем преимущество ООП ?

В чем преимущество ООП ?
Сколько я книг не видел (наверное мало), нигде не встречал четкого ответа на этот вопрос. Везде просто доводилось до сведения, что ООП это лучше и все, а почему и в чем выгода ни как не могу понять.
Посему просьба:
объясните чем лучше
или
дайте ссылку на статью/книгу

При этом, необходимо чтобы там был пример, который должен показать эту выгоду.
Просто я никак не могу понять как классы применить для своих программ.
Пишу пока C++Builder, пока, потому что новее 6 версии билдера не будет, а переходить пока не знаю на что, но что это будет Си(С++, С#) думаю будет 99%.

Так вот хочется понять, выгоду на примерах, причем реальных, а не понятных?

ps: реальный пример: работа с БД, с обработкой файлов и т.д.
__________________
не могу просто так сидеть, когда другие работают. пойду полежу.
spike вне форума  
Старый 15.12.2004, 11:52     # 2
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
Самый реальный пример: кнопка. Если пишеш что-нибудь с интерфейсом, то кнопок наберётся много. Чтобы тридцать раз не программировать кнопку, можно её один раз запрограммировать в классе и потом вызывать этот класс.
А если пишеш просто какую-нибудь функцию, на пример поиск файла в директории, то с классами там ничего не выйграеш.
EvroStandart вне форума  
Старый 15.12.2004, 12:16     # 3
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
spike
Вот тут уже есть очень хорошая дискуссия по интересующему тебя вопросу
http://www.wasm.ru/forum/index.php?a...ic=4762&page=0

P.S. Если ты пишешь на BCB с VCL, то уже во всю используешь ООП, часто сам того даже не замечая. Как элементарный пример: я не думаю что ты сильно замарачиваешься с работой со стандартными С-строками (char*). Уж куда ведь удобнее пользоваться AnsiString
ЕЖ вне форума  
Старый 15.12.2004, 12:56     # 4
Drakosha
Full Member
 
Аватар для Drakosha
 
Регистрация: 16.10.2002
Адрес: ArchLinux, Internet
Сообщения: 557

Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)
ооп как абстракция более понятен человеку.
Drakosha вне форума  
Старый 15.12.2004, 13:18     # 5
Hex0gen
Newbie
 
Регистрация: 24.09.2004
Сообщения: 42

Hex0gen Известность не заставит себя ждать
spike:
Много чего полезного и правильного есть в ООП.
Ну, для новичка я бы объяснил так:
Класс (объект) - это совокупность методов и данных. Если ты пишешь на чистом C, то твой проект состоит из файлов. В файле у тебя есть функции и есть глобальные переменные. С точки зрения ООП, можно сказать, что каждый файл (.c) - это класс (точнее, это реализация класса). У такого файла-класса есть интерфейс (заголовочный файл .h).

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

Если хочешь, попробуй найти книжку Гради Буч: Объектно-ориентированный анализ и проектирование. В ней не только есть примеры программ, но и объясняются принципы правильного проектирования.

Последний раз редактировалось Hex0gen; 15.12.2004 в 13:22.
Hex0gen вне форума  
Старый 15.12.2004, 13:59     # 6
pHroZen
::VIP::
 
Аватар для pHroZen
 
Регистрация: 11.03.2004
Адрес: #0556
Сообщения: 806

pHroZen Имеются все основания чтобы гордиться собойpHroZen Имеются все основания чтобы гордиться собойpHroZen Имеются все основания чтобы гордиться собойpHroZen Имеются все основания чтобы гордиться собойpHroZen Имеются все основания чтобы гордиться собойpHroZen Имеются все основания чтобы гордиться собойpHroZen Имеются все основания чтобы гордиться собойpHroZen Имеются все основания чтобы гордиться собойpHroZen Имеются все основания чтобы гордиться собой
Если говорить о скорости выполнения программы, то при использование ООП программа будет работать только медленее.
Если есть желание, чтобы кто-то потом разобрался в куче процедур, переменных и функций, твоей программы, да и сам ты в них не запутался. Используй ООП. При этом твоя программа будет легко модифицируема и логически структурирована.
__________________
R Tape loading error, 0:1
pHroZen вне форума  
Старый 16.12.2004, 05:18     # 7
komar2100
Guest
 
Сообщения: n/a

Цитата:
yazz:
Если говорить о скорости выполнения программы, то при использование ООП программа будет работать только медленее.
Слишком громко для всего ООП. Что касается Си++ ,kонечно, если разворачивать длинные иерархии классов, то может быть медленнее, но так ведь и на голом Си можно намутить воды
А самое медленное, что может быть - это малюсенький оверхед, который получится при доступе к виртуальной функции, да и то, появится при многотысячных повторениях.
 
Старый 16.12.2004, 22:06     # 8
Evgeni
Member
 
Аватар для Evgeni
 
Регистрация: 30.10.2002
Адрес: Москва
Сообщения: 278

Evgeni Луч света в тёмном царствеEvgeni Луч света в тёмном царствеEvgeni Луч света в тёмном царствеEvgeni Луч света в тёмном царствеEvgeni Луч света в тёмном царствеEvgeni Луч света в тёмном царстве
Цитата:
Сообщение от Drakosha
ооп как абстракция более понятен человеку.
Абсолюно точно. Просто для человека представить окружающий нас мир очень просто. И иерархию классов выстроить просто.
Дерево ->
Хвойное дерево ->
Сосна.
Ель
Лиственное дерево
Береза
Ольха
И т.д. Причем у Сосна, Ель, Береза, Ольха есть общие и различные свойства и методы. Вместо того чтобы описывать все общие свойства и методы каждый раз заново, ты описываешь их в базовом классе Дерево и _забываешь как они реализованы_. Тебе уже это не важно. Дальше ты просто наращиваешь функционал дочернего класса для конкретного дерева. Когда ты пишешь функции, чаще всего надо понимать и иметь перед глазами весь код. Здесь же реализация от тебя спрятана (в хорошем смысле этого слова). Ты просто знаешь. что умеет этот объект и что его характеризует. Если провести аналогии с русским языком, свойства - это прилагательные, а методы - глаголы. Классы позволяют четко структурировать данные. Но, если у тебя прога в три пейддауна, классы сделают из них пять. Нерентабельно. Однако если у тебя 1000 пейдждаунов, ты в своих функциях заблудишься, кто кого откуда вызывает. А в класса внутренняя реализация не важна. Не важно как хранятся данные. важен только способ получения данных и совершение действий над ними.
Когда ты пишешь процедуры, они рождаются экспромтом по мере необходимости. Потом, когда надо обощить несколько частных функций в одну, придется переправлять половину кода, везде, где они использовались. Классы так писать просто не получится. Ты всегда вначале продумываешь все структуру классов, их взаимоотношение и т.д., а потом только садишься кодировать (по-другому просто не получится). Классы заставляют продумать будущее приложение. Все недостатки и неувязки проекта сразу станут видны. Самое просто применение классов - визуальные объекты (формы, кнопки, тулбары). Но почему бы не сделать класс для жесткого диска - диск, партишен, директория, файл... для партишена делаем свойство label и метод format. причем не надо каждый раз задавать, какой диск ты хочешь форматнуть и какому хочешь сменить имя. Это ты задашь один раз при создании класса. И еще для смены label и получения значения метки тома ты бы писал 2 функции SetLabel(volume) и SetLabel(volume). И каждый раз вызывал бы поочереди эти свойства. В при использовании классов ты просто напишешь во внешней функции value = volume.Label или volume.Label = new_value. Внутренне, это кончено 2 функции. но это абсолютно не важно. В том и прелесть что отделяется понятие использования объекта от его внутреннего состава
__________________
Критиковать - это показывать автору что он делает не так, как делал бы я, если бы умел.
Не торопитесь в АД. Без вас не начнут!
Evgeni вне форума  
Старый 17.12.2004, 12:10     # 9
yunus
Guest
 
Сообщения: n/a

Очередной вопрос из разряда "что лучше"
(типа: pentium - athlon, c++ - pascal, windows - linux и т.п.)

Правильнее было бы ГДЕ лучше использовать ООП, а где и старенький структурный сгодится.
Если переформулировать таким образом, то ответ будет таков -

1. Желаешь использовать свои наработки неоднократно либо предоставить свои труды на разграбление другим - твори в ООП

2. Очередной раз творишь велосипед, то есть работаешь систему имеющую миллионы аналогов - ООП для тебя.

2. Создаешь нечто одноразовое и уникальное (например дипломный проект ) - предпочти что-либо менее трудозатратное.

Ибо использовать чужой код в ООП - одно удовольствие (в Builder-e мышью оттягивается), а вот писать свое... тут уж готовся к нетривиальному обьектному анализу и жуткому модульному тестированию
 


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 07:49.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.