ОО
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
ОО
Читаю первую главу книги по С++
и в первой главе кратенькое введение про объектную ориентацию, с тремя основными аспектами:
- abstraction
- encapsulation
- modularity
Думаю интересно что скажут нового vs. inheritance-encapsulation-polymorphism?
Читаю и получается, что это то же самое, только вид сбоку.
Это что в C++ такая терминология лучше прижилась? Или это все-таки не совсем одно и то же? Или это абстракция данного конкретного автора на предмет what is object-oriented ?
А может еще какая-то причина этому есть о которой я и не подозреваю?
Сабина
и в первой главе кратенькое введение про объектную ориентацию, с тремя основными аспектами:
- abstraction
- encapsulation
- modularity
Думаю интересно что скажут нового vs. inheritance-encapsulation-polymorphism?
Читаю и получается, что это то же самое, только вид сбоку.
Это что в C++ такая терминология лучше прижилась? Или это все-таки не совсем одно и то же? Или это абстракция данного конкретного автора на предмет what is object-oriented ?
А может еще какая-то причина этому есть о которой я и не подозреваю?
Сабина
-
- Новичок
- Posts: 23
- Joined: 13 Sep 2002 20:23
- Location: Vilnius, Lithuania
Re: ОО
Sabina wrote:Читаю первую главу ...
- abstraction
- encapsulation
- modularity
Вобще-то все эти три понятия - три аспекта encapsulation (в широком смысле):
- abstraction - пользователь [класса] не должен знать о подробностях реализации, чтобы им пользоваться;
encapsulation (в узком смысле) - пользователь [класса] не должен иметь доступа к подробностям реализации;
modularity - классы должны быть независимыми и самодостаточными (loose coupling and high cohesion)
Но я-то думаю, что все это имеет только теоретический интерес...
Как раз для первой главы введения, чтобы запутать
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Re: ОО
Rolandas wrote:Sabina wrote:Читаю первую главу ...
- abstraction
- encapsulation
- modularity
Вобще-то все эти три понятия - три аспекта encapsulation (в широком смысле):abstraction - пользователь [класса] не должен знать о подробностях реализации, чтобы им пользоваться;
Не совсем так. Абстракция - это умение абстрагировать стиуацию на уровне классов и их функциональности. Отюда и ADTs (abstract data types). То есть тут не только инкапсуляция, но и наследование и полиморфизм.
Rolandas wrote:encapsulation (в узком смысле) - пользователь [класса] не должен иметь доступа к подробностям реализации;
Тут я полностью согласна.
Rolandas wrote:modularity - классы должны быть независимыми и самодостаточными (loose coupling and high cohesion)
Тут опять все три по моему мнению. Чтобы выделенные модули правильно и эффективно решали поставленную проблему, нельзя их дизайнить без наследования и полиморфизма в голове.
Вопрос-то я задала потому, что первый раз сталкиваюсь с таким выделением составляющих OO подхода: abstraction, modularity, encapsulation.
Это что-то типичное для большинства книг по С++?
Для автора данной книги?
Сабина
-
- Уже с Приветом
- Posts: 15312
- Joined: 30 Apr 2003 16:43
Encapsulation:
"....the only thing that one object knows about another object is the object's interface. The only way to refer to another object's code or data is through its messages. The object's logic and its data sit inside the object, hidden from other objects, and only the object's own methods can change or refer to its own data.
The interface encapsulates the object's data and code. The developer of the object is the only one who knows about and cares about the actual code and data inside the object."
Polymorphism:
"Yet another benefit of separating behavior from implementation is polymorphism. Polymorphism simply means that two or more objects of different classes can respond to the same message. The method implementation for the message can be different for each object. The sender of a message does not care how the message is implemented by the receiving object, only that the receiving object supports the message. This allows the sending object to communicate with a variety of objects that support a common message without worrying about how many different implementations there are to this one message."
Inheritance:
"Inheritance enables a class to have the same behavior as another class and then to extend or tailor that behavior to provide unique behavior."
"....the only thing that one object knows about another object is the object's interface. The only way to refer to another object's code or data is through its messages. The object's logic and its data sit inside the object, hidden from other objects, and only the object's own methods can change or refer to its own data.
The interface encapsulates the object's data and code. The developer of the object is the only one who knows about and cares about the actual code and data inside the object."
Polymorphism:
"Yet another benefit of separating behavior from implementation is polymorphism. Polymorphism simply means that two or more objects of different classes can respond to the same message. The method implementation for the message can be different for each object. The sender of a message does not care how the message is implemented by the receiving object, only that the receiving object supports the message. This allows the sending object to communicate with a variety of objects that support a common message without worrying about how many different implementations there are to this one message."
Inheritance:
"Inheritance enables a class to have the same behavior as another class and then to extend or tailor that behavior to provide unique behavior."
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
-
- Уже с Приветом
- Posts: 15312
- Joined: 30 Apr 2003 16:43
Sabina wrote:zVlad wrote:Encapsulation:.....
Спасибо за цитату, но я тут совершенно не вижу ответа на мой вопрос
Сабина
Как говорится каков вопрос таков и ответ, а если серьезно, скажите, многие ли пишущие на ОО языках знают об этих вещах? А среди тех кто знает - многие ли умеют ими пользоваться так как это предполагается?
Поэтому, какая разница как (на свой лад) какой автор руководства по ООП дает свое представление о принципах ООП. Главное научиться лабать код.
Своим же предыдущим сообщением я лишь хотел добавить к топику правильный набор принципов ООП с их определениями.
-
- Удален за рекламу собственного бизнеса
- Posts: 178
- Joined: 24 Jul 2002 08:02
- Location: Baile Atha Cliath
-
- Уже с Приветом
- Posts: 446
- Joined: 04 Jan 2002 10:01
- Location: Irkutsk->Rockville, MD->Dallas, TX
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
Mongush wrote:Как уже сказали все три свойства - это encapsulation. К наследованию и полиморфизму они никакого отношения не имееют.
Не могли бы вы немного поподробне пояснить почему только инкапсуляция. Я кроме шуток не понимаю как можно грамотно выделить и описать класс (OO abstraction) без учета наследия и полиморфизма
Сабина
-
- Уже с Приветом
- Posts: 2673
- Joined: 10 Feb 2002 10:01
-
- Уже с Приветом
- Posts: 18906
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: ОО
Sabina wrote:Читаю первую главу и в первой главе кратенькое введение про объектную ориентацию, с тремя основными аспектами:
- abstraction
- encapsulation
- modularity
Думаю интересно что скажут нового vs. inheritance-encapsulation-polymorphism? Читаю и получается, что это то же самое, только вид сбоку.
Под выделенным можно также понимать code/objects reuse, что как раз и является одним из оснований STL.
Или это абстракция данного конкретного автора на предмет what is object-oriented ?
Вполне возможно.
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 15312
- Joined: 30 Apr 2003 16:43
leprechaun wrote:zVlad wrote:...свое представление о принципах ООП. Главное научиться лабать код.
По-моему, тут вопрос больше касается дизайна, а не собственно программирования. А для этого, все-таки, важнее правильно думать, а не "лабать код".
Абсолютно согласен. Но в этом случае речь следовало бы вести об ОО дизайне, не о С++. Если же речь (судя по заголовку книги) идет о С++, то значит в итоге будут учить "лабать код".
В моей цитате выше надо бы поменять слово "научиться" на слово "научить"ю
-
- Уже с Приветом
- Posts: 18906
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Sabina wrote:Я кроме шуток не понимаю как можно грамотно выделить и описать класс (OO abstraction) без учета наследия и полиморфизма
Бывают фригидные трансцендентальные классы без предков и наследства, и кроме всего прочего они сами себе и интерфейс и имплементация оного... А вообще класс в С++ - это data type, подчиняющийся определенным правилам, и все. Простейший пример - int.
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 2506
- Joined: 13 Jan 2003 22:34
- Location: Kiev :: Los Angeles, CA
Сабина, наверное не ответит на ваш вопрос, но очень интересная статейка по теме.
http://www.toa.com/pub/abstraction.txt
http://www.toa.com/pub/abstraction.txt
-
- Уже с Приветом
- Posts: 15312
- Joined: 30 Apr 2003 16:43
Бегло просмотрев статью, предложенную theukrainian, подумалось, что понятию абстракции в программировании не может быть дано определения по той простой причине что на сегодняшний день программирование находится (и возможно всегда будет находиться в силу того что это техническая дисциплина) на уровне гораздо более низком чем тот, который необходим для ответа на вопрос что есть абстракция. На уровне программирования же возможны только некоторые спекуляции и заклинания.
На мой взгляд из трех принципов приведенных Сабиной только один работает, остальные лишь дань наукообразию. Предлагаю сравнить с тремя принципами, приведенными мной (может кто догадался откуда они) и ответить на вопрос: Есть ли в них неясность, двухсмысленность с точки зрения программирования? Достаточно ли они определены, чтобы быть руководством (высокого уровня, конечно) по программированию, или точнее дизайну?
На мой взгляд из трех принципов приведенных Сабиной только один работает, остальные лишь дань наукообразию. Предлагаю сравнить с тремя принципами, приведенными мной (может кто догадался откуда они) и ответить на вопрос: Есть ли в них неясность, двухсмысленность с точки зрения программирования? Достаточно ли они определены, чтобы быть руководством (высокого уровня, конечно) по программированию, или точнее дизайну?
-
- Уже с Приветом
- Posts: 5669
- Joined: 13 Oct 2000 09:01
- Location: East Bay, CA
theukrainian wrote:Сабина, наверное не ответит на ваш вопрос, но очень интересная статейка по теме.
http://www.toa.com/pub/abstraction.txt
Спасибо за статью. Прочитав вот это
"The process of hiding all the details of an object that do not contribute to its essential characteristics; typically, the structure of an object is hidden, as well as the implementation of its methods. The terms information hiding and encapsulation are usually interchangeable."
-- [Booch, 1991]
в очередной раз подумалось "до чего же все-таки умный мужик, только одно обидно не умеет объяснять простые вещи доступным языком". Доступным для меня в первую очередь, я на на его книжках обычно засыпаю на третьей странице
Сабина
PS. Пока я тут обсуждаю объектную ориентацию в С++, класс вчера заканселили из-за того, что половина народу дропнула
-
- Уже с Приветом
- Posts: 19924
- Joined: 30 Aug 2000 09:01
- Location: WA
Sabina wrote:в очередной раз подумалось "до чего же все-таки умный мужик, только одно обидно не умеет объяснять простые вещи доступным языком". Доступным для меня в первую очередь, я на на его книжках обычно засыпаю на третьей странице
Он умеет. Когда выступает "в живую", он с этим вполне успешно справляется.
В книжках же, он старается использовать достаточно формальный язык. Что, пожалуй, тоже правильно. Не детектив ведь пишет...
Удачи!