Untitled
unknown
plain_text
a year ago
1.9 kB
3
Indexable
// Классы с совместимыми интерфейсами: КруглоеОтверстие и // КруглыйКолышек. class RoundHole is constructor RoundHole(radius) { ... } method getRadius() is // Вернуть радиус отверстия. method fits(peg: RoundPeg) is return this.getRadius() >= peg.getRadius() class RoundPeg is constructor RoundPeg(radius) { ... } method getRadius() is // Вернуть радиус круглого колышка. // Устаревший, несовместимый класс: КвадратныйКолышек. class SquarePeg is constructor SquarePeg(width) { ... } method getWidth() is // Вернуть ширину квадратного колышка. // Адаптер позволяет использовать квадратные колышки и круглые // отверстия вместе. class SquarePegAdapter extends RoundPeg is private field peg: SquarePeg constructor SquarePegAdapter(peg: SquarePeg) is this.peg = peg method getRadius() is // Вычислить половину диагонали квадратного колышка по // теореме Пифагора. return peg.getWidth() * Math.sqrt(2) / 2 // Где-то в клиентском коде. hole = new RoundHole(5) rpeg = new RoundPeg(5) hole.fits(rpeg) // TRUE small_sqpeg = new SquarePeg(5) large_sqpeg = new SquarePeg(10) hole.fits(small_sqpeg) // Ошибка компиляции, несовместимые типы small_sqpeg_adapter = new SquarePegAdapter(small_sqpeg) large_sqpeg_adapter = new SquarePegAdapter(large_sqpeg) hole.fits(small_sqpeg_adapter) // TRUE hole.fits(large_sqpeg_adapter) // FALSE
Editor is loading...
Leave a Comment