-
Удалено модератором
-
Удалено модератором
-
Удалено модератором
-
-
> Сергей Суровцев ©
Что в нем не так? Можно правильный пример?
-
> картман © (13.09.18 11:43) [124]
> Что в нем не так?
Неправильна уже самая первая строка: "Объектно-ориентированное программирование (object-oriented programming) или событийно-управляемое программирование (event-driven programming)...".
Здесь утверждается, что OOP и EDP - синонимы, а это не так. Вот пример OOP без EDP:
program Prog1; begin with TMyObject.Create do try writeln(ClassName); finally Free; end; end.
А вот пример EDP без OOP:
program Prog1; var C: char; begin ReadLn(C); case C of '0': writeln('Zero)'; '1': writeln('One'); end; end.
-
>картман © (13.09.18 11:43) [124] >Что в нем не так? Можно правильный пример?
Да все в нем не так.
>Объектно-ориентированное программирование или событийно-управляемое программирование Это не одно и то же.
>программирование, направленное на объекты. Программирование с использованием объектов.
>Объект (object) - это все то, что нас окружает, и с чем мы можем взаимодействовать. Объекты могут быть информационными и материальными. По этому определению Объект это Объект!
>В программировании мы имеем дело с созданием моделей информационного типа, отражающих (описывающих) свойства и поведение некоторых реальных объектов. Это малый частный случай. В основном это работа с искусственными абстракциями и обработка данных.
>В каждый момент времени объект характеризуется присущим именно ему набором свойств (properties) и методов (methods) Набор свойств и методов объекта НЕ ЗАВИСИТ ОТ ВРЕМЕНИ. Могут зависеть только данные в свойствах.
>Чтобы обращаться к элементам коллекции, каждому объекту присваивается уникальное имя или номер. Имя - идентификатор, присваивается для получения доступа с момента создания и НИКАК не зависит от наличия коллекции.
>Объединение в объекте его свойств и методов называют инкапсуляцией (encapsulation). Инкапсуляция означает, что объект инкапсулирует (содержит) в себе свойства и методы Инкапсуляция - это использование модификаторов доступа с целью сокрытия частей программного кода от конечного пользователя. Это не про наличие свойств и методов, а про их доступность извне.
Объект это конструкция, которая позволяет объединить в себе как данные так и исполняемый код. Смысл объекта - это создание логически законченной абстрации, для манипулирования ею как единым целым.
-
Программисты делятся на "историков" и "структурных".
Историк последователен и пишет программу, как роман, сюжет за сюжетом. Но программа, не роман, хотя Юрий Зотов правильно подчеркнул, что её можно рассматривать, как некое повествование.
Так или иначе, но программист-историк на каком-то конечном фрагменте программы вынужден будет остановиться потому, что логика программы включает в себя не только последовательность действий, но и вложенность подпрограмм, одних конструкций в другие, а в целом должна, тем не менее, представлять собой единое целое.
Это - сложная задача и тут выигрывает программист структурный, который сначала пишет
begin
end;
а потом обдумывает, что там будет внутри.
А "историк" начинает вовсю использовать goto.
Я сам "историк" конечно :)
-
> Сергей Суровцев © (13.09.18 13:54) [126]
> Объект это конструкция, которая позволяет объединить в себе > как данные так и исполняемый код. > Смысл объекта - это создание логически законченной абстрации, > для манипулирования ею как единым целым.
а вот как у них мне было понятнее))
-
"ОО-языки упрощают абстракцию, возможно, даже слишком ее упрощают. Они поддерживают создание структур с большим количеством связующего кода и сложными уровнями. Это может оказаться полезным в случае, если предметная область является действительно сложной и требует множества абстракций, и вместе с тем такой подход может обернуться неприятностями, если программисты реализуют простые вещи сложными способами, просто потому что им известны эти способы и они умеют ими пользоваться. Все ОО-языки несколько склонны "втягивать" программистов в ловушку избыточной иерархии. Чрезмерное количество уровней разрушает прозрачность: крайне затрудняется их просмотр и анализ ментальной модели, которую по существу реализует код. Всецело нарушаются правила простоты, ясности и прозрачности, а в результате код наполняется скрытыми ошибкми и создает постоянные проблемы при сопровождении. Данная тенденция, вероятно, усугубляется тем, что множество курсов по программированию преподают громоздкую иерархию как способ удовлетворения правила представления. С этой точки зрения множество классов приравнивается к внедрению знаний в данные. Проблема данного подхода заключается в том, что слишком часто "развитые данные" в связующих уровнях фактически не относятся у какому-либо естественному объекту в области действия программы - они предназначены только для связующего уровня. Одной из причин того, что ОО-языки преуспели в большинстве характерных для них предметных областей (GUI-интерфейсы, моделирование, графические средства), возможно, является то, что в этих областях относительно трудно неправильно определить онтологию типов. Например, в GUI-интерфейсах и графических средствах присутствует довольно естественное соотвествие между манипулируемыми визуальными объектами и классами. Если выясняется, что создается большое количество классов, которые не имеют очевидного соответствия с тем, что происходит на экране, то, соотвественно, легко заметить, что связующий уровень стал слишком большим."
Эрик Реймонд, "Искусство программирования для Unix"
-
>картман © (13.09.18 14:35) [128] >а вот как у них мне было понятнее))
А как у них??? Где там определение объекта? Что это такое? Зачем он если и так есть и переменные и функции сами по себе? Смысл-то использования ООП в чем можно из этого текста понять, что оно дает в плюс? Особенно с нуля?
-
Основой структурного программирования является деление программ на функции и модули.
Процедурно-ориентированные языки (Паскаль, Фортран) основаны на единстве доступа, как к локальным, так и к глобальным данным.
А этих данных часто так много !
Плюс связи между функциями и данными... Плюс, если структура данных изменились, то надо переписывать все функции заново.
Но самое главное, что реально познаваемый мир не относит себя ни к функциям, ни к данным. В программировании должны появиться новые определения - свойство и поведение, которые свяжут воедино функцию и её ответную реакцию на воздействие.
Вот тут и появляется ООП, которое синтезирует данные, функции и действия над ними, как над "объектом".
Инкапсуляция, которая вызвала у господина Внук © (12.09.18 07:46) [114] такое живое воспоминание о недостатках - это не сокрытие информации, как безграмотно пишется в op.cit., а всего лишь ограничение доступа к данным класса так, что их (данных) изменение не может осуществляться никак, кроме методов объекта.
-
>Копир © (13.09.18 15:25) [131] >Но самое главное, что реально познаваемый мир не относит себя ни к функциям, ни к данным.
В реальном мире нет понятий строк, чисел и дат. Это все НАШИ абстракции. Базовые. А вот что стало реально необходимо, и что дает ООП - это следующий уровень абстракции, надстройку, имеющую Состояние и Поведение. Именно эту абстракцию и назвали Объект. По сути абстракция, имеющая Состояние, т.е. набор данных с определенными значениями, и так была. А что добавилось - так это возможность изменения этих данных не выходя за рамки этой абстракции. Автономный перевод ее из одного состояния в другое. Теоретически Объект должен быть автономен.
-
>Сергей Суровцев © (13.09.18 15:57) [132] : >А что добавилось - так это возможность изменения этих данных не выходя за рамки этой абстракции.
Это, да !
Так человек, как ООП-обобщение может быть разным в рамках, хоть этического, хоть эстетического подхода...
Но он остаётся человеком, а не эстетическим, например, роботом.
Безусловно, метод, который заложен в ООП философски очень продуктивен. Он позволяет отвлечься от деталей и задуматься о целях :)
PS: А где Вы так долго пропадали ?
-
>Копир © (13.09.18 16:10) [133] >Безусловно, метод, который заложен в ООП философски очень продуктивен.
ООП и было задумано, как взаимодействие различных автономных абстракций одного уровня путем передачи друг другу сообщений и реагировании на них. То есть объекты должны были быть автономны, не позволять ничему внешнему управлять собой, а управляли собой сами, реагируя на сообщения от других объектов. Поэтому везде как мантру повторяю про моделирование ООП реального мира. Но палку как всегда перегнули и то, о чем писал Игорь стало камнем предкновения. Далеко не все гармонично вписывается в концепцию ООП порождая избыточность и выбиваясь из общей парадигмы. Потому что реальный мир это одно, а мир абстракций это немного другое.
-
>Копир © (13.09.18 16:10) [133] >PS: А где Вы так долго пропадали ?
Тут я. Заглядываю периодически, но времени на это немного. Да и тем особо не было, не про потоп же в 19 веке дискутировать...)))
-
> Сергей Суровцев © (13.09.18 14:58) [130]
> А как у них??? > Где там определение объекта? Что это такое? Зачем он если > и так есть и переменные и функции сами по себе? Смысл-то > использования ООП в чем можно из этого текста понять, что > оно дает в плюс? Особенно с нуля?
да они сказали, что Объектно-ориентированное программирование (object-oriented programming) или событийно-управляемое программирование (event-driven programming) - программирование, направленное на объекты. Объект (object) - это все то, что нас окружает, и с чем мы можем взаимодействовать. куда нагляднее, чего еще нужно? Ой, с событиями скрестили, нехорошие, - а не начхать ли? Кому события в объектах мешают?
-
> Юрий Зотов © (13.09.18 13:44) [125] > Вот пример OOP без EDP > А вот пример EDP без OOP
А почему в первом примере нет EDP, если мы считаем, что во втором он присутствует?
-
Хотя да, writeln - скорее всего вывод в видео память.
-
Объектно-ориентированным может быть не только язык программирования, но и философия. Этот подход восходит к Канту, когда человек представляется не носителем данных, информации и знаний, а объектом. Вещью, если хотите.
Современный проводник этой философии - Грэм Харман, американский философ с парадоксальными взглядами.
Его логика вполне понятна потому, что если мы не знаем о мыслях человека, так сказать, объективно, как о явлении (пока эти мысли не высказаны вслух или не опубликованы), то их описание может быть только спекулятивным, т.е. по подобию их исследователя.
Если же исследователь не человек, а, например, некий аппарат, умеющий делать выводы, то и отождествлять человека он будет с вещью.
Гегель в своей идеалистической философии был более снисходителен к человеку и называл эту "вещь" Духом.
Объективно-ориентированные философы стремятся стать "вещью", чтобы преодолеть препятствие между миром и его познанием, которое называется как ?
Правильно, идеологией :)
Человек мыслящий использует не идеологию, а специальные вещи, которые называет "инструментами". И сам является инструментом в руках более могущественных, чем человек.
Эта проблема обозначена ещё Кантом, ведь если быть разумным - значит самому всё решать, но как быть с тем, что самого главного, мы не решали, а именно, to be, or not to be ?
PS: Этим летом моя внучка была в Калининграде. И там, в музее спросила, - неужели у вас нет бюста Канта ? Меня дедушка просил купить.
Вот, стоит этот гипсовый бюстик, размером с пачку сигарет. Белый такой, пока не пожелтеет от моего курения :)
|