JavaRush /Курси /C# SELF /Структура типової програми на C#

Структура типової програми на C#

C# SELF
Рівень 8 , Лекція 1
Відкрита

1. Програма — як офіс, повний відділів

Коли ви лише знайомитеся з програмуванням, здається, що можна просто писати код рядок за рядком — і все працюватиме. Але щойно програма трохи ускладнюється, у голові виникає плутанина: де що розташоване, навіщо це написано, а якщо треба змінити один рядок — де він узагалі лежить?…

Тому C#, як і більшість сучасних мов, пропонує спосіб «розкладати» код по поличках, щоб будь-якої миті можна було зрозуміти, що робить програма, і швидко знайти потрібне місце.

Уявіть компанію. У ній є відділ кадрів, бухгалтерія, IT-відділ, відділ логістики тощо. У кожного відділу — своя зона відповідальності, свої працівники й завдання.

У програмі на C# кожен такий «відділ» — це клас. Один клас відповідає, наприклад, за роботу з користувачами, інший — за обчислення, третій — за роботу з файлами.

Ось типова структура простого проєкту:

  • Program.cs — головний офіс: тут міститься «точка входу», звідки все починається.
  • User.cs — відділ, де зберігаються та обробляються дані про користувача.
  • Calculator.cs — відділ обчислень.
  • FileHelper.cs — фахівці з файлів.

Навіть у зовсім маленькій програмі зазвичай є принаймні один клас. А великі проєкти — це вже цілий «хмарочос» із сотень класів!

2. Клас — це коробка з інструментами

C# — це об’єктно-орієнтована мова, і в ній усе — об’єкти. Типи об’єктів називають класами.

Клас — це як коробка або шафка, у яку ми складаємо потрібні речі: змінні, методи, властивості. Уявіть коробку з написом «Молотки»: усередині лежать лише інструменти, пов’язані з молотками.

class Example
{
    // Тут будуть наші інструменти: змінні, методи, властивості
}
Оголошення класу в C#

Класи зазвичай містять змінні та функції. У C# змінні класу прийнято називати полями, а функції класу — методами. Але суть від цього не змінюється.

Пам’ятаєте наш перший код?

Console.WriteLine("Всім привіт!");
string name = Console.ReadLine();

У цьому коді є і клас, і методи:

  • Console — це клас, який містить методи (функції) для роботи з консоллю.
  • WriteLine — це метод класу Console, який виводить текст на екран.
  • ReadLine — це метод класу Console, який читає введення з клавіатури.

Усе програмування певною мірою зводиться до написання власних класів і методів, які викликають методи інших класів.

3. Поля (змінні) класу — це його пам’ять

Усередині класу можна зберігати змінні (їх часто називають «полями»). Це як комірки пам’яті, куди ми складаємо якісь дані.

class Counter
{
    int value; // поле — тут буде зберігатися поточне значення лічильника Counter
}
Приклад поля (змінної) класу

Поля дають змогу класу щось пам’ятати між викликами різних методів. Наприклад, підраховувати, скільки разів натиснули кнопку.

Полів може бути скільки завгодно. Наприклад:

class User
{
    int id;             // унікальний номер користувача
    string name;        // ім'я користувача
    int age;            // вік
    string adress;      // адреса
    User[] children;    // діти
}

4. Методи — дії, які може виконувати клас

Методи — це «уміння» нашого класу. Якщо клас — працівник, то методи — це його навички: що він уміє робити.

  • Метод може вивести щось на екран.
  • Обчислити суму двох чисел.
  • Прийняти дані «на вхід» і повернути результат.

Будова методу:

  • Тип значення, що повертається (наприклад, void — якщо нічого не повертає, або int — якщо повертає число)
  • Імʼя методу (наприклад, Print)
  • Параметри в дужках (можуть бути відсутні)
  • Фігурні дужки { ... } — тіло методу
class Printer
{
    public void PrintHello()
    {
        Console.WriteLine("Hello!");
    }

    public int Add(int a, int b)
    {
        return a + b;
    }
}
Приклад методів класу

Детальніше про методи та всі пов’язані з ними нюанси ви дізнаєтеся в найближчих лекціях.

5. Властивості — розумні змінні

Властивість (property) — це як удосконалена змінна: вона не лише зберігає значення, а й може щось робити під час отримання або зміни значення.

Приклад із життя: ви не можете просто так змінити заробітну плату працівника — бухгалтер перевірить, чи все коректно. Так само властивість може «перевіряти» дані:

class Person
{
    private int age;		// змінна (поле) класу 

    public int Age			// властивість Age. зберігає дані у змінній класу age.
    {
        get { return age; }	// метод get - викликається, коли хтось пробує отримати значення Age 
        set 				// метод Set - викликається, коли хтось пробує змінити значення Age 
        {
            if (value >= 0)
                age = value;
        }
    }
}

Код у методі set не дасть встановити від’ємний вік. Детальніше розберемо властивості в найближчих лекціях.

6. Модифікатори доступу

У C# можна визначати, які частини класу доступні з інших класів, а які залишаються лише для внутрішніх потреб. Для цього використовують модифікатори доступу. Якщо перед іменем поля, методу або класу написано ключове слово public, то до нього можна звернутися з будь-якого місця програми.

Якщо ж перед іменем поля, методу або класу написано ключове слово private, то до нього можна звернутися лише з його власного класу. Інші класи цього не бачитимуть. Ніби їх узагалі немає.

  • public — видно всім. Такі методи й властивості можна використовувати з інших класів.
  • private — видно лише всередині самого класу. Це внутрішні деталі, які не повинні бути доступні іншим.
class Demo
{
    public int OpenValue;     // видно ззовні
    private int secretValue;  // видно тільки всередині

    public void ShowOpen() { Console.WriteLine(OpenValue); }
    private void HideSecret() { Console.WriteLine(secretValue); }
}

Золоте правило: поля зазвичай роблять private, а назовні «виносять» тільки потрібні методи й властивості (public).

7. Як виглядає реальний клас

Ось «зібраний» приклад — мінікалькулятор:

class Calculator
{
    private int result; // поле для зберігання результату

    public int Result
    {
        get { return result; }
        private set { result = value; } // доступ тільки всередині класу
    }

    public void Add(int a, int b)
    {
        result = a + b;
    }

    public void Clear()
    {
        result = 0;
    }
}

Такий підхід трапляється майже в усіх сучасних програмах на C#!

8. Top-level statements

Взагалі в C# увесь код завжди міститься в класах. Клас — це мінімальна одиниця програми. У програмі може бути багато класів, але щонайменше — один.

Зачекайте, а як же весь той код, який ми щойно писали, адже там не було жодних класів?

А це одна з нових можливостей мови C#: можна написати код без класу, а C#-компілятор сам перетворить його на клас.

Припустімо, у вас є такий код у Program.cs:

// твій код
WriteSmile();
WriteSmile();
WriteSmile();

//твоя власна функція
void WriteSmile()
{
    Console.WriteLine(":)");
}
Top-level statement: код без класу

Компілятор C# перетворює його на такий:

using System;

class Program
{
    static void Main()			// твій код
    {
        WriteSmile();
        WriteSmile();
        WriteSmile();        
    }

    static void WriteSmile()	//твоя власна функція
    {
        Console.WriteLine(":)");
    }
}
Як компілятор перетворює top-level statement у клас

Якщо ви зрозуміли лише половину — нічого страшного: головне — уловити суть. У найближчих лекціях ми крок за кроком розберемо все, про що тут ідеться.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ