Object oriented programming and interfaces
Adam D. Ruppe
destructionator at gmail.com
Tue Dec 5 12:28:53 UTC 2017
On Tuesday, 5 December 2017 at 07:47:32 UTC, Dirk wrote:
> The distance function is implementation dependend and can only
> be computed between two objects of the same class (in this
> example the class is Item).
Just don't put it in the interface. Leave it in the individual
classes with the stricter definition.
Or, as I said before, implement the interface by asking the
question: what if you call Item.distance (NotAnItem)? Maybe you
could throw an exception or return NaN to show this is an invalid
comparison. But if it is in the interface, you MUST answer that
question somehow.
---
interface Medoid {
float distance(Medoid other);
}
class Item {
float distance(Medoid other) {
if(auto item = cast(Item) other) {
// it is an item, implement comparison here
} else {
return float.nan; // invalid comparison
}
}
}
---
Tip: you can generically test that two objects are of the same
class through their interfaces by checking:
if(typeid(cast(Object) o1) == typeid(cast(Object) o2)) {
// same class
} else {
// same interface, but different class
}
Might be useful for your classifier, though checking the nan of
distance might be good too.
More information about the Digitalmars-d-learn
mailing list