ОО

User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

ОО

Post by Sabina »

Читаю первую главу книги по С++
и в первой главе кратенькое введение про объектную ориентацию, с тремя основными аспектами:
- abstraction
- encapsulation
- modularity

Думаю интересно что скажут нового vs. inheritance-encapsulation-polymorphism?
Читаю и получается, что это то же самое, только вид сбоку.
Это что в C++ такая терминология лучше прижилась? Или это все-таки не совсем одно и то же? Или это абстракция данного конкретного автора на предмет what is object-oriented :wink: ?
А может еще какая-то причина этому есть о которой я и не подозреваю?

Сабина
Rolandas
Новичок
Posts: 23
Joined: 13 Sep 2002 20:23
Location: Vilnius, Lithuania

Re: ОО

Post by Rolandas »

Sabina wrote:Читаю первую главу ...
- abstraction
- encapsulation
- modularity


Вобще-то все эти три понятия - три аспекта encapsulation (в широком смысле):

    abstraction - пользователь [класса] не должен знать о подробностях реализации, чтобы им пользоваться;
    encapsulation (в узком смысле) - пользователь [класса] не должен иметь доступа к подробностям реализации;
    modularity - классы должны быть независимыми и самодостаточными (loose coupling and high cohesion)

Но я-то думаю, что все это имеет только теоретический интерес...
Как раз для первой главы введения, чтобы запутать :)
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: ОО

Post by Sabina »

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.

Это что-то типичное для большинства книг по С++?
Для автора данной книги?


Сабина
zVlad
Уже с Приветом
Posts: 15312
Joined: 30 Apr 2003 16:43

Post by zVlad »

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."
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

zVlad wrote:Encapsulation:.....


Спасибо за цитату, но я тут совершенно не вижу ответа на мой вопрос :pain1:

Сабина
zVlad
Уже с Приветом
Posts: 15312
Joined: 30 Apr 2003 16:43

Post by zVlad »

Sabina wrote:
zVlad wrote:Encapsulation:.....


Спасибо за цитату, но я тут совершенно не вижу ответа на мой вопрос :pain1:

Сабина


Как говорится каков вопрос таков и ответ, а если серьезно, скажите, многие ли пишущие на ОО языках знают об этих вещах? А среди тех кто знает - многие ли умеют ими пользоваться так как это предполагается?
Поэтому, какая разница как (на свой лад) какой автор руководства по ООП дает свое представление о принципах ООП. Главное научиться лабать код.
Своим же предыдущим сообщением я лишь хотел добавить к топику правильный набор принципов ООП с их определениями.
leprechaun
Удален за рекламу собственного бизнеса
Posts: 178
Joined: 24 Jul 2002 08:02
Location: Baile Atha Cliath

Post by leprechaun »

zVlad wrote:...свое представление о принципах ООП. Главное научиться лабать код.

По-моему, тут вопрос больше касается дизайна, а не собственно программирования. А для этого, все-таки, важнее правильно думать, а не "лабать код".
Mongush
Уже с Приветом
Posts: 446
Joined: 04 Jan 2002 10:01
Location: Irkutsk->Rockville, MD->Dallas, TX

Post by Mongush »

Как уже сказали все три свойства - это encapsulation. К наследованию и полиморфизму они никакого отношения не имееют.
А вообще станная книга - OO дизайн с не OO библиотекой :)
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

Mongush wrote:Как уже сказали все три свойства - это encapsulation. К наследованию и полиморфизму они никакого отношения не имееют.


Не могли бы вы немного поподробне пояснить почему только инкапсуляция. Я кроме шуток не понимаю как можно грамотно выделить и описать класс (OO abstraction) без учета наследия и полиморфизма :pain1:

Сабина
rainall
Уже с Приветом
Posts: 2673
Joined: 10 Feb 2002 10:01

Post by rainall »

"И не вступая в спор..." странное название у темы. OOP - хорошо , OOD - хорошо, а ОО что такое? Это я к тому что терминология бывает не менее важна, чем знание основ. Особенно при общении с рекрутерами, которые знают совсем немного.
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

rainall wrote:"И не вступая в спор..." а ОО что такое?


И даже не отвечая на ваш вопрос...

Сабина
User avatar
Boriskin
Уже с Приветом
Posts: 18906
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: ОО

Post by Boriskin »

Sabina wrote:Читаю первую главу и в первой главе кратенькое введение про объектную ориентацию, с тремя основными аспектами:
- abstraction
- encapsulation
- modularity
Думаю интересно что скажут нового vs. inheritance-encapsulation-polymorphism? Читаю и получается, что это то же самое, только вид сбоку.


Под выделенным можно также понимать code/objects reuse, что как раз и является одним из оснований STL.

Или это абстракция данного конкретного автора на предмет what is object-oriented :wink: ?


Вполне возможно.
Тупизна как Энтропия. Неумолимо растет.
zVlad
Уже с Приветом
Posts: 15312
Joined: 30 Apr 2003 16:43

Post by zVlad »

leprechaun wrote:
zVlad wrote:...свое представление о принципах ООП. Главное научиться лабать код.

По-моему, тут вопрос больше касается дизайна, а не собственно программирования. А для этого, все-таки, важнее правильно думать, а не "лабать код".


Абсолютно согласен. Но в этом случае речь следовало бы вести об ОО дизайне, не о С++. Если же речь (судя по заголовку книги) идет о С++, то значит в итоге будут учить "лабать код".
В моей цитате выше надо бы поменять слово "научиться" на слово "научить"ю
User avatar
Boriskin
Уже с Приветом
Posts: 18906
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Post by Boriskin »

Sabina wrote:Я кроме шуток не понимаю как можно грамотно выделить и описать класс (OO abstraction) без учета наследия и полиморфизма :pain1:


Бывают фригидные трансцендентальные классы без предков и наследства, и кроме всего прочего они сами себе и интерфейс и имплементация оного... А вообще класс в С++ - это data type, подчиняющийся определенным правилам, и все. Простейший пример - int.
Тупизна как Энтропия. Неумолимо растет.
User avatar
theukrainian
Уже с Приветом
Posts: 2506
Joined: 13 Jan 2003 22:34
Location: Kiev :: Los Angeles, CA

Post by theukrainian »

Сабина, наверное не ответит на ваш вопрос, но очень интересная статейка по теме.
http://www.toa.com/pub/abstraction.txt
zVlad
Уже с Приветом
Posts: 15312
Joined: 30 Apr 2003 16:43

Post by zVlad »

Бегло просмотрев статью, предложенную theukrainian, подумалось, что понятию абстракции в программировании не может быть дано определения по той простой причине что на сегодняшний день программирование находится (и возможно всегда будет находиться в силу того что это техническая дисциплина) на уровне гораздо более низком чем тот, который необходим для ответа на вопрос что есть абстракция. На уровне программирования же возможны только некоторые спекуляции и заклинания.
На мой взгляд из трех принципов приведенных Сабиной только один работает, остальные лишь дань наукообразию. Предлагаю сравнить с тремя принципами, приведенными мной (может кто догадался откуда они) и ответить на вопрос: Есть ли в них неясность, двухсмысленность с точки зрения программирования? Достаточно ли они определены, чтобы быть руководством (высокого уровня, конечно) по программированию, или точнее дизайну?
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

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]


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

Сабина

PS. Пока я тут обсуждаю объектную ориентацию в С++, класс вчера заканселили из-за того, что половина народу дропнула :(
uncle_Pasha
Уже с Приветом
Posts: 19924
Joined: 30 Aug 2000 09:01
Location: WA

Post by uncle_Pasha »

Sabina wrote:в очередной раз подумалось "до чего же все-таки умный мужик, только одно обидно не умеет объяснять простые вещи доступным языком". Доступным для меня в первую очередь, я на на его книжках обычно засыпаю на третьей странице :wink:

Он умеет. Когда выступает "в живую", он с этим вполне успешно справляется.
В книжках же, он старается использовать достаточно формальный язык. Что, пожалуй, тоже правильно. Не детектив ведь пишет...

Удачи!

Return to “Вопросы и новости IT”