Кстати про борщ)
Много лет назад объяснял девушке на подобном примере азы С++. Ей помогло, может быть для вас тоже что-то прояснится (адаптировано под Х++):
X++:
// Класс "Борщ" - описание рецепта приготовления борща
class Borsh {
...
void addItems(Real _water, Real _kartofan, Real _svekla) // добавить ингредиенты
{...}
void addSalt() // посолить
{...}
void cook(Real _cookTime) // варить
{...}
void doSimple() // приготовить "стандартный" вариант (не заморачиваясь)
{
// Через "объект" this можно вызывать "собственные" методы
// (то есть принадлежащие тому же экземпляру, к которому относится текущий метод)
// This является служебной конструкцией языка, его не нужно объявлять, он доступен в любом классе
this.addItems(1500, 300, 200);
this.addSalt();
this.cook(45);
}
}
// Используем наш класс-рецепт дважды
public static void Job_Borsh(Args _args)
{
// Сварить два разных экземпляра борща: "обычный" и "экспериментальный"
Borsh simpleBorsh = new Borsh();
Borsh overSaltBorsh = new Borsh();
// обычный (все этапы готовки выполнятся "по кулинарной книге"):
simpleBorsh.doSimple();
// экспериментальный (управляем этапами самостоятельно):
overSaltBorsh.addItems(1500, 100, 900); // ингредиенты в "своих" пропорциях
overSaltBorsh.addSalt(); // солить
overSaltBorsh.addSalt(); // солить
overSaltBorsh.cook(90); // варить
overSaltBorsh.addSalt(); // и опять солить...
}
// А еще можно сделать класс-наследник, добавив новый ингредиент
class Borsh_Morkovka extends Borsh {
...
void addMorkovka(Real _morkovka)
{...}
void doSimple() // перекрыть метод класса-предка
{
this.addMorkovka(150); // добавить новый ингредиент
super(); // вызов унаследованного поведения (см. Borsh/doSimple())
}
}