Навчальний простір / C#
Моделювання та аналіз програмного забезпечення

Модель системи та перші типи C#

Модель починається з питання й межі системи.

Зміст матеріалу

Що ви опануєте

Ви навчитеся визначати межу системи, виділяти поняття предметної області та представляти їх простими типами C#. Приклад — бронювання обладнання навчальної лабораторії. Система повинна знати, який пристрій існує, хто його резервує та чи можна виконати операцію. Модель допомагає погодити ці поняття до створення інтерфейсу й сховища.

Модель та її призначення

Модель — цілеспрямоване представлення властивостей системи. Вона спрощує реальність відповідно до питання, яке потрібно дослідити. Контекстна модель показує учасників і зовнішні взаємодії; модель даних — сутності й зв’язки; модель поведінки — події та переходи. Кожна повинна мати визначені межі та припущення.

Предметна область — частина діяльності, яку підтримує система. Сутність має ідентичність, що зберігається попри зміну властивостей. Два однакові проєктори є різними фізичними пристроями. Значення характеризує дані без окремої предметної ідентичності: наприклад, інтервал часу. Розрізнення допомагає визначити, як порівнювати об’єкти й перевіряти зв’язки.

Межа й актори

Для лабораторії студент подає запит, працівник підтверджує видачу, адміністратор додає обладнання. Це ролі акторів. Сам пристрій є предметною сутністю, а зовнішня служба входу — окремою системою. Якщо наша модель не керує ідентифікацією, потрібно позначити, що вона отримує вже перевірений ідентифікатор користувача.

Зберіть словник: обладнання, бронювання, видача, повернення. Для кожного запишіть визначення й приклад. «Бронювання» та «видача» мають різні наслідки: перше резервує можливість, друге фіксує фактичне передання. Змішування цих понять призводить до суперечливих станів і повідомлень. Модель повинна підтримувати погоджений словник.

Основи C#

C# є мовою зі статичною типізацією; код виконується в середовищі .NET. int містить ціле число, bool — логічне, string — текст. decimal використовують для десяткових розрахунків із відповідним діапазоном; double — для наближених числових обчислень. var виводить статичний тип із ініціалізатора. Це не дозволяє довільно змінити тип змінної пізніше.

Клас описує тип об’єкта. Властивість є членом з операціями читання get і запису set або обмеженого початкового запису init. Вона може контролювати доступ до даних. Конструктор створює початковий стан. Метод реалізує дію. Модифікатор public відкриває член зовнішньому коду, private обмежує класом.

Виконуваний приклад

csharp
using System;

var projector = new Equipment("Проєктор", 2);
Console.WriteLine($"{projector.Name}: {projector.Units}");

public sealed class Equipment
{
    public string Name { get; }
    public int Units { get; }

    public Equipment(string name, int units)
    {
        if (string.IsNullOrWhiteSpace(name))
            throw new ArgumentException("Потрібна назва", nameof(name));
        if (units <= 0)
            throw new ArgumentOutOfRangeException(nameof(units));
        Name = name.Trim();
        Units = units;
    }
}

Приклад можна вставити у Program.cs проєкту dotnet new console. Верхні інструкції є top-level statements, тобто .NET створює потрібну точку входу. Оголошення типу розміщене після них. sealed забороняє наслідування класу. Властивості лише з get можна встановити в конструкторі; користувач потім читає їх без довільного запису.

Перевірка IsNullOrWhiteSpace відкидає порожній текст і пробіли. Trim прибирає крайні пробіли. nameof повертає назву параметра для повідомлення. Інтерполяція $"..." підставляє значення. Очікуваний вивід: «Проєктор: 2». Виняток показує порушення контракту вхідних даних.

Типи значень і посилань

Клас є посилальним типом: присвоєння іншій змінній зазвичай копіює посилання на той самий об’єкт. int і Guid є типами значень. Система керування пам’яттю .NET збирає недосяжні керовані об’єкти, але це не визначає бізнес-часу бронювання й не звільняє автоматично всі зовнішні ресурси в потрібний момент. Для ресурсів використовують визначені контракти на кшталт IDisposable.

Nullable позначає можливість відсутнього значення: int? може містити число або null. Для посилальних типів nullable annotations допомагають compiler аналізувати доступ. Перед активним використанням властивості потрібно знати, чи контракт дозволяє null. Не приховуйте відсутність значення порожнім текстом без пояснення.

Від моделі до перевірки

Перевірте створення з правильною назвою, лише пробілами, нульовою й від’ємною кількістю. Модель описує групу однакових одиниць, а не ідентичність конкретного проєктора. Для обліку окремих пристроїв потрібно змінити постановку та додати ID. Рішення має відповідати питанням користувачів: чи потрібно знати, саме який пристрій було видано?

Типові помилки й практичний аналіз

Помилки: клас названо як таблицю без поведінки, випадковий null не має контракту, кількість групи плутається з конкретним пристроєм, зовнішній актор включений як внутрішня сутність. Намалюйте контекст лабораторії й позначте межу. Додайте словник із п’яти понять. Поясніть, які властивості потрібні для першого питання, а які можна відкласти.

Як перевіряти модель за сценаріями

Модель описує лише обрані аспекти системи. Для каталогу обладнання важливі ідентичність пристрою, його доступність та допустимі дії. Колір кнопки не належить до цього рівня, якщо він не впливає на предметне правило. Така межа дозволяє обговорювати систему незалежно від майбутнього інтерфейсу.

Почніть із короткого сценарію: студент знаходить вільний пристрій, подає запит, відповідальна особа підтверджує видачу. Для кожного дієслова визначте об’єкт, передумову та зміну. Слово «вільний» потрібно уточнити: фізично повернений, справний і без активного резервування. Один bool може приховувати кілька незалежних причин недоступності.

У C# властивість з get повертає значення, а доступність set визначає можливість зміни. Read-only інтерфейс поля захищає спосіб звернення, але всі конструктори й методи все одно повинні підтримувати правила. String може містити порожній або пробільний текст; перевірка лише типу не підтверджує допустимість назви. У проекті з nullable reference types компілятор допомагає помічати потенційну відсутність, однак предметні перевірки залишаються потрібними.

Перевірте модель за трьома подіями: створення пристрою, спроба повторної видачі й повернення. Якщо потрібний факт не представлений у моделі, операцію неможливо обґрунтувати. Додайте мінімальний атрибут або окрему сутність та поясніть його роль. Не переносіть усі поля з випадкового інтерфейсу в клас без аналізу. Структура повинна підтримувати визначені сценарії та спостережувані правила.

Схема процесу

Модель системи та перші типи C#Оберіть елемент, щоб побачити пояснення

Визначаємо учасників і межу.

Самоперевірка

Перевірте розуміння
Що визначає призначення моделі?
Як обґрунтувати відповідь своїми словами?
Модель відбирає властивості за конкретною метою. Надлишкова деталізація може приховати потрібний зміст.

Підсумок

Модель починається з питання й межі системи. Статичні типи, класи та властивості C# дозволяють зробити її виконуваною. Визначення термінів і перевірки початкового стану допомагають зберігати узгоджений предметний зміст.

Джерела

Опрацювали матеріал?

Збережіть цей крок у своєму прогресі.

← Повернутися до дисципліни
© 2026 Анастасія Іскандарова-МалаЕлектронний навчальний посібник · ДДТУ

Пошук у посібнику

Спробуйте «C++», «RAII» або «бази даних».