Woolf 03 мар 2015, 11:42
Банальный пример - расширения гуя.
Первый программер написал систему, в которой есть какое-то базовое окно и какой-то базовый виртуальный визуальный компонент, который умеет принимать события от мыши и от системы. Ну написал и занялся другим.
Второй программер берет этот визуальный компонент и, наследуясь от него, пишет кнопочки, эдиты и прочее, что там нужно.
Третий программер, наследуясь от работы второго, делать анимационные кнопочки, красивые боксы и окна, заточенные конкретно по стилю под игру.
Причем, все три програмиста между собой не контактируют, в работу друг-друга не лезут, и никак не пересекаются на уровне редактируемых файлов, если есть согласованное API. Т.е. второму программеру вовсе не интересно, что и как там первый реализовал, лишь бы соответствовало его требованиям, как и третьему не интересно что и как первые два там понаписали.
Или вот еще пример..
У меня в гуе есть листбокс и treebox, где в лист пихаются объекты. Как добиться универсальности, чтобы этот листбокс отображал что угодно - предметы, достижения, список игроков?
Элементарно.. Листбокс хранит объекты моего класса GuiItem, у которого есть метод render. Теперь, наследуем предмет от GuiItem, оверридим метод render и вуаля, мы можем пихать предметы в листбокс. Теперь для предмета будем выводиться его картинка, название и краткое описание, что это. То же и с другими сущностями.