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

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

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

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

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

spike



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В чем преимущество ООП ?
Сколько я книг не видел (наверное мало), нигде не встречал четкого ответа на этот вопрос. Везде просто доводилось до сведения, что ООП это лучше и все, а почему и в чем выгода ни как не могу понять.
Посему просьба:
объясните чем лучше
или
дайте ссылку на статью/книгу
 
При этом, необходимо чтобы там был пример, который должен показать эту выгоду.
Просто я никак не могу понять как классы применить для своих программ.
Пишу пока C++Builder, пока, потому что новее 6 версии билдера не будет, а переходить пока не знаю на что, но что это будет Си(С++, С#) думаю будет 99%.
 
Так вот хочется понять, выгоду на примерах, причем реальных, а не понятных?
 
ps: реальный пример: работа с БД, с обработкой файлов  и т.д.

Всего записей: 693 | Зарегистр. 23-10-2003 | Отправлено: 11:32 15-12-2004 | Исправлено: spike, 11:32 15-12-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
тема почти флеймовая, но тем не менее:
пишешь на билдере, с использованием VCL? - тогда попробуй написать тоже самое на winapi. вот тебе и конкретный ответ.
А насчет книг - просто не те книги попадались

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 12:14 15-12-2004
spike



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

Всего записей: 693 | Зарегистр. 23-10-2003 | Отправлено: 13:56 15-12-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
spike

Цитата:
вот хочу осознать нужность классов, чтобы понимать другое  

Здесь как с автомобилем - я и на велосипеде прекрасно катаюсь, зачем мне автомобиль? - пока не посидишь за рулем - не поймешь, т.е. пока сам не напишешь что-то большое или сложное - понять трудно.
уже почти написал пример, но стер - есть вещи которые нужно понимать самому - почитай, подумай.
 

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 14:19 15-12-2004
Dimonka



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

Всего записей: 398 | Зарегистр. 03-01-2002 | Отправлено: 15:00 15-12-2004
Kursist



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Лично я только осваиваю ООП в Delphi, но мне оно больше нравится - Объект как изолированное от внешнего мира существо и как оно будет реагировать на внешний мир - решает его создатель! И внутренний мир этого существа "закрыт" от лишних взоров - а потом можно сколько хочешь создавай экземпляров этого объекта - конечно, можно и процедуру много раз вызывать - но "кайф" от этого уже не такой

Всего записей: 137 | Зарегистр. 12-07-2004 | Отправлено: 15:28 15-12-2004
vserd

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

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

Думай, читай, смотри код. Пока не созрел. Вернее, IMHO, у тебя не было проекта который большой/сложный. Который нужно сопровождать. После такого проекта все что описано по ОО проектированию, анализу и тем более программированию становится ясным. Все становится на места и начинаешь понимать все книжки которые прочитал по ОО.
 
Как пример работы с базой данных.
Пусть есть у нас класс который ответственен за хранение инфы о предприятиях и людях.
нужно хранить инфу полное наименование, краткое наименование, Банковские реквизиты, адрес, телефон(ы) для предприятий. Фамилию имя отчество, адрес, телефон для физического лица.
Пускай у нас данные храняться в таблицах
Objects (краткое имя, ID) (для облегчения поиска)  
Person (ID, фамилия, имя, отчество, адрес)
Org (ID, полное наименование, Банковские реквизиты, адрес)
Phones (ID, SubID, номер телефона)
 
Все объекты которые мы хотим хранить в БД должны писать себя в Objects в обязательном порядке, и в другие таблицы по необходимости.
 
Я не буду обсуждать нормализацию, для одной задачи это может быть нормльная структура, для других не очень.
 
Пускай у нас есть три класса.
иерархия  
DBObject->Person
DBObject->Org
 
1. DBObject - базовый класс записывает себя в Objects
2. Person - записывает себя в Person, Phones
3. Org - записывает себя в  Org, Phones  
 
Тебе не нужно занть из скольких мест ты вычитываешь (и восколько вставляешь) данные.
 
Если ты хочешь ввести другой класс ты должен отнаследоваться от DBObject и тебе уже не важно как этот объект сохранит себя в Objects, ты занешь что сохранит в обязательном порядке. Тебе достаточно отладить DBObject  один раз и он будет себя вести везде одинаково.
 
Если тебе нужно добавить другой телефон к физическому лицу, то тебе не прийдется (при работе без объектов) лопатить половину программы выискивая а где же уменя (или у этого идиота за которым мне приходится хвосты подчищать) есть доступ к БД. Потому что нужно проконтролировать все эти места, и не важно что доступ к двум телефонам у меня в одной лишь форме, сохраняюсь я в 10 местах и не факт что правильно. А так вызвал MyPeron.save и даже не занаю что для этого снеслось пол базы в одном месте и вставилось в другом.  
 

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 17:14 15-12-2004
krast

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Главные преимущества ооп - это три краеугольных камня ооп: инкапсуляция, наследование, полиморфизм.
 
ну и туда же отнесем удобство представления предметной области в классах, делегирование функций, эффективноя реализация принципа нисходящего програмирования.
 
Ой, да в принципе преимуществ до фига, просто те надо писать, думать, опять писать и сам созреешь

Всего записей: 442 | Зарегистр. 15-09-2003 | Отправлено: 17:29 15-12-2004
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
spike
ООП абсолютно не запрещает ничего структурного, всё тоже самое есть в нём. В этом смысле никакой разницы. Разница появляется когда у тебя есть похожие процедуры принимающая в качестве параметра MyRec типа Record (или Struct для C). Ты пишешь:

Код:
MyProc1(MyRec,....

Вместо этого, если MyRec станет классом ООП ты пишешь:

Код:
MyRec.MyProc1(....

Однако в первом случае внутри MyProc1 ты писал:

Код:
MyRec.A1 := 'Вася'

А во втором случае ты будешь писать:

Код:
A1 := 'Вася'

Изменяется смысл и область видимости таких процедур. И уже после того, как ты сэкономишь таким способом размер текста своей программы, начнутся РЕАЛЬНЫЕ преимущества ООП - наследование, инкапсулирование, полиморфизм и делегирование. А так же более разумное поведение за счёт мобильности структуры классовой иерархии.

----------
Meaning this is something additional.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 17:36 15-12-2004
Sleepwalker



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

----------
...или я ничего не понимаю в этой жизни... или понимаю слишком хорошо...

Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 18:27 15-12-2004
wiwiw

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
spike
почитай Буча ( он и в электронном виде есть)

Всего записей: 127 | Зарегистр. 20-03-2004 | Отправлено: 23:43 15-12-2004
integeri

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

Всего записей: 8 | Зарегистр. 25-11-2004 | Отправлено: 13:47 16-12-2004
vito333



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

Всего записей: 3322 | Зарегистр. 13-05-2002 | Отправлено: 08:29 17-12-2004
mihas83



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

Цитата:
то я использую стуктуры и функции и всё  
и не вижу зачем мне классы  

Ну стуктуры, это практически те же классы, с одной лишь маленькой разницей...  
vserd

Цитата:
преймущества ОО проявляются на средних и выше проектах.  
Облегчается анализ, проектирование, и потом программирование программ.  
Увеличивается надежность кода путем локализации, наследования

Да и с чужих толковых наработок, встроить что-то тогда легче.


----------
Мы знаем: время растяжимо. Оно зависит от того,
Какого рода содержимым Вы заполняете его. (C. Маршак)

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 11:03 17-12-2004
Pinocchio

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Да Вы что????? Озверели что ли (извиняюсь)?
ООП необходим во всех программах желающих иметь интерфейс выше уровня Goto(X,Y).
С появлением в советской промышленности манипуляторов "колобок" (это такая здоровенная мышка с большим металлическим шариком), разработка программ стала ориентироваться на экранную область. Было написано дофига IDE и все они на ООП потому что Move(X,Y) это Hide(object) изменение координат и Show(object) значит рядом с данными о координатах надо хранить указатели на функции рисования, а на ООП это делается одним словом virtual. Так что вопросы надо было задавать 15 лет назад. А сегодня рынок другого уже не примет.

----------
Meaning this is something additional.

Всего записей: 683 | Зарегистр. 18-11-2002 | Отправлено: 11:08 17-12-2004
UncoNNecteD



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

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 12:52 17-12-2004
Dimonka



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

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

Пример откровенно плохой. Не упреешь нисколько.  
На "Спектруме" не было никакого ООП в помине, а всяких попиксельных скроллеров, систем частиц и т.д. было писано-переписано. Причём ООП там бы вообще не покатило, потому что нужна была дикая оптимизация кода, чтобы уложится в 70тышш тактов процессора.  
 
Один товарищ рассказывал о том как он создавал сайт на ПХП для очень большой аудитории. Так вот в этом сайте не то что никаким ООП и не пахло, дык там ещё все лишние пробелы поудаляли из исходников, чтобы хоть как-то снизить нагрузку на сервер..
 
А вообще ООП - этохорошо-о-о

Всего записей: 398 | Зарегистр. 03-01-2002 | Отправлено: 14:37 17-12-2004
UncoNNecteD



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

Цитата:
А вообще ООП - этохорошо-о-о

Халявнее, но не лучше.

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 20:22 17-12-2004
mihas83



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

Цитата:
Халявнее, но не лучше.

Расшифруй мысль...  

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 20:45 17-12-2004
UncoNNecteD



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Проектировать и писать становится проще, уже написанные объекты (например компоненты) позволяют делать сложные приложения быстро, но они получаются неоптимизированными, громоздкими. Плюс к тому проффесионализм программистов падает, ростут требования к системам.

----------
-= Я тут чертовски давно =-

Всего записей: 4040 | Зарегистр. 21-03-2002 | Отправлено: 21:04 17-12-2004
Открыть новую тему     Написать ответ в эту тему

Страницы: 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