Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
class MyClass { ... }
role MyRole extends MyClass { ... }
context MyContext uses MyClass as MyRole, MyClass2 as MyRole2 { ... }
class User #< ActiveRecord::Base
class Author < User
#...
end
class Reader < User
# ...
end
end
class User
include Author
...
end
class MyRole
{
public:
MyRole(const MyClass&); // не-explicit конструктор!
...
}
class MyRole2 ....
class Context
{
public:
Context(const MyRole&, const MyRole2&);
...
}
...
MyClass obj1; MyClass2 obj2;
Context context(obj1, obj2); Context ссылки на объекты сущностей (счетов), а по-факту создаются нужные роли.public class Account implements SourceAccount, DestinationAccount {
...
}
public interface SourceAccount {
transfer_out(double amoun);
}
public interface DestinationAccount {
transfer_in(double amount);
}
public class TransferringMoney {
public TransferringMoney(SourceAccount, DestinationAccount) {
}
}
def transfer source_account_id, destination_account_id, amount
def transfer_out account, amount
raise "Insufficient funds" if account.balance < amount
account.decrease_balance amount
account.update_log "Transferred out", amount
end
def transfer_in account, amount
account.increase_balance amount
account.update_log "Transferred in", amount
end
transfer_out Account.find(source_account_id), amount
transfer_in Account.find(destination_account_id), amount
end
self.transfer source_account_id, destination_account_id, amount
?> module Talkable; def say; puts "Hi!"; end; end
=> nil
>> u = User.last; u.extend Talkable; u.say
Hi!
=> nil
module Talkable
def say
puts "Hi!"
end
end
u = User.last
u.extend Talkable
u.say
=> Hi!
Data Context Interaction (DCI) — эволюция объектно-ориентированной парадигмы