ООП классическое против прототипного

1.

ООП
Классическое против прототипного

2.

Прототип

3.

Объявление классов
public abstract class Deposit
{
protected Deposit(DepositTypes type)
{
Type = type;
}
public readonly DepositTypes Type;
}
function Deposit(type) {
this.type = type;
}
export abstract class Deposit {
public readonly type: DepositTypes;
constructor(type: DepositTypes) {
this.type = type;
}
}

4.

Наследование
public class MoneyDeposit : Deposit
{
public MoneyDeposit(decimal sum)
: base(DepositTypes.Money)
{
if (sum < 0)
function MoneyDeposit(sum) {
Deposit.call(
this,
DepositTypes.Money
);
if (sum < 0)
throw new Error('sum < 0');
throw new
ArgumentOutOfRangeException(nameof(sum));
this.sum = sum
Sum = sum;
}
}
public readonly decimal Sum;
}
MoneyDeposit.prototype =
Object.create(Deposit.prototype);
MoneyDeposit.prototype.constructor =
MoneyDeposit;

5.

Наследование
export class MoneyDeposit extends Deposit {
public readonly sum: number;
constructor(sum: number) {
super(DepositTypes.Money);
if (sum < 0)
throw new Error('Invalid sum');
this.sum = sum;
}
}

6.

Сокрытие
public class Repository<TEntity> : IRepository<TEntity>
where TEntity : IEntity
{
private readonly List<TEntity> _list = new List<TEntity>();
public void Add(TEntity entity)
{
_list.Add(entity);
}
public IEnumerable<TEntity> All()
{
return _list;
}
}

7.

Сокрытие
function Repository() {
var _list = [];
export class Repository<TEntity extends IEntity>
extends IRepository<TEntity> {
private readonly _list: TEntity[] = [];
this.add = function(entity){
_list.push(entity);
};
public void Add(TEntity entity) {
this._list.push(entity);
}
this.all = function(){
return _list.slice(0);
};
}
public ReadonlyArray<TEntity> All() {
return this._list;
}
}

8.

Полиморфизм
ad hoc
статический
динамический
параметрический
English     Русский Правила