Re[5]: Математика и ООП: аналогии
От: Gaperton http://gaperton.livejournal.com
Дата: 03.11.03 14:35
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>Здравствуйте, Кирилл Осенков, Вы писали:


DG>>>Все операции для эллипса доступны и для круга.

КО>>Ну не знаю. А операция "сжать в n раз к большей оси? А как насчет провести прямую через фокусы?

DG>Считаем, что для круга ось, например, всегда вертикальна

DG>
DG>class Ellipse
DG>{
DG>  virtual Vector BigAxis {get {return (Focus1 - Focus2).Normalize();}}
DG>}

DG>class Circle:
DG>  Ellipse
DG>{
DG>  override Vector BigAxis {get {return new Vector(0, 1);}}
DG>}
DG>

DG>тогда все эти операции продолжают работать.

Попался!

Грабли номер 1: в императивных языках с поддержкой ООП есть ограничение на операции. Они должны быть замкнуты, т. е. не выводить экземпляр класса из этого класса. Для функциональных языков это не так, но это случай отдельный и экзотический.

Применение stretch ("сжать в n раз к большей оси") в твоем примере выведет экземпляр Circle из класса Circle, и он станет эллипсом (так как ты все-таки согласился ввести ось для круга). Если не согласен, то просто попробуй написать метод stretch.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.