Всем привет.
Пишу очередную (четвертую) часть
Язык Nemerle.
Данная часть должна быть посвящена ООП-у.
К сожалению, в голову не приходит хороших идей для демонстрации ООП-а.
Во второй и третьей части в основном разбиралась написание кода в функциональном стиле на базе примера "строчный калькулятор". Калькулятор в этих частях был консольным приложением. Логика калькулятора была написана практически полностью в функциональном стиле.
Я думал сделать WinForms-версию этого калькулятора, но оказалось, что это слишком простой пример, практически не демонстрирующий ООП. Вот как он выглядит:
using System.Windows.Forms;
using System.Drawing;
module Program
{
Main() : void
{
def form = Form();
def expressionComboBox = ComboBox();
def calculateButton = Button();
def resultTextBox = TextBox();
expressionComboBox.TabIndex = 0;
expressionComboBox.Bounds = Rectangle(10, 10, 330, 30);
calculateButton.AutoSize = true;
calculateButton.AutoSizeMode = AutoSizeMode.GrowAndShrink;
calculateButton.TabIndex = 1;
calculateButton.Text = "Calculate";
calculateButton.Location = Point(350, 10);
resultTextBox.Location = Point(10, 40);
resultTextBox.Width = calculateButton.Right - 20;
resultTextBox.TabIndex = 2;
form.AcceptButton = calculateButton;
form.Text = "Calculator";
form.Controls.Add(resultTextBox);
form.Controls.Add(calculateButton);
form.Controls.Add(expressionComboBox);
form.ClientSize = Size(calculateButton.Right + 10,
resultTextBox.Top + resultTextBox.Height + 10);
calculateButton.Click +=
fun(_, _)
{
def text = expressionComboBox.Text;
def calc = CalcParser();
def updateHistoryList()
{
def index = expressionComboBox.Items.IndexOf(text);
when (index >= 0)
{
expressionComboBox.Items.RemoveAt(index);
expressionComboBox.Text = text;
}
expressionComboBox.Items.Insert(0, text);
}
updateHistoryList();
match (calc.ParseAndEval(text))
{
| Some(val) => resultTextBox.Text = val.ToString();
| None =>
def (pos, msg) = calc.Error;
resultTextBox.Text = msg;
when (pos >= 0)
{
expressionComboBox.SelectionStart = pos;
expressionComboBox.SelectionLength = 1;
expressionComboBox.Select();
}
}
};
Application.EnableVisualStyles();
Application.Run(form);
}
}
Тут даже наследование не потребовалось (дизайнер форм им пользуется, но смысла в это — ноль).
Прошу подкинуть идей примеров в процессе реализации которых можно было бы продемонстрировать основные концепции ООП, точнее элементы языка используемые для поддержки ООП (они в Nemerle такие же как в C#).
Пример должен быть:
* Кратким. Я должен легко описать его в рамках одной статьи (10-15) страниц (по 5 тысяч знаков без учета пробелов).
* Он должен демонстрировать наследование, виртуальные методы, события. Хорошо бы, но не обязательно, чтобы он так же демонстрировал использование интерфейсов.
* Понятным.
* Не абстрактным и практичным. Меня самого всегда раздражало когда ООП подавали на совершенно не реалистичных примерах вроде построения иерархии животных или библиотеки графических примитивов (которые на практике никакого ООП не используют).
* Возможно, но не обязательно, связан с примером строчного калькулятор.
Одной из идей предложенной Воронковым было разработать электронную таблицу (аля сильно упрощенный Exel). Но боюсь, что это будет перебор.