На данный момент читаю интереснейшую книгу по ООП за авторством "Банды четырех", а именно: Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес "Приемы объектно-ориентированного программирования. Паттерны проектирования."При объяснении основ ООП на с. 34 (издательство Питер, 2009) сформулировано "второе правило объектно-ориентированного программирования": предпочитайте композицию наследованию класса. Понять что такое наследование в терминах Ruby и на примере Ruby on Rails достаточно легко: SomeModel < ActiveRecord::Base и SomeController < ApplicationController. Объясните пожалуйста в тех же самых терминах, что есть такое композиция. (подозреваю, что это есть include SomeClass)
--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror...@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-un...@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru
На данный момент читаю интереснейшую книгу по ООП за авторством "Банды четырех", а именно: Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес "Приемы объектно-ориентированного программирования. Паттерны проектирования."При объяснении основ ООП на с. 34 (издательство Питер, 2009) сформулировано "второе правило объектно-ориентированного программирования": предпочитайте композицию наследованию класса. Понять что такое наследование в терминах Ruby и на примере Ruby on Rails достаточно легко: SomeModel < ActiveRecord::Base и SomeController < ApplicationController. Объясните пожалуйста в тех же самых терминах, что есть такое композиция. (подозреваю, что это есть include SomeClass)
--
Например, есть у тебя игра, а в игре есть собачка. Можно сделать
(особенно в С++) класс Dog унаследованным от Renderable (рисуемый на
экране объект) и, скажем, SoundEmitter (гав-гав), что сразу же даст
целую кучу проблем. Поэтому Банда советует делать Renderable и
SoundEmitter членами класса. Такое решение, кстати, вытекает из еще
одной парадигмы - MVC, так как в нашем примере Renderable и
SoundEmitter - это обыкновенный View.
Ты наследуешь свои модели от Base и в конфигурации выбираешь адаптер
mysql, sqlite и др.
И от конфигурации меняется именно connection.
А если делать через наследование, то нужно было бы модельки
наследовать от, скажем, ActiverRecord::MySqlBase или
ActiveRecord::SqliteBase
Ну и как следствие, при смене СУБД, тебе придется поменять базовый
класс для всех моделей.
--
--
Yury Korolev
AnjLab Team http://anjlab.com
С чего взял, что не наследуются?
--
Best regards, Dmytro Shteflyuk
http://kpumuk.info/, #twitter: http://twitter.com/kpumuk