Різниці між об'єктно-орієнтованим та процедурним програмуванням
🎯 Ключова відмінність:
Об'єктно-орієнтоване програмування (ООП) відрізняється від процедурного програмування тим, що основний акцент ставиться не на алгоритми, а на розробку структур зберігання та управління даними.
| Аспект | Процедурне програмування | Об'єктно-орієнтоване програмування |
|---|---|---|
| Основний фокус | Алгоритми та функції | Об'єкти та їх взаємодія |
| Організація коду | Функції та процедури | Класи та об'єкти |
| Підхід до даних | Дані відокремлені від функцій | Дані та методи об'єднані в класи |
| Принцип розробки | "Що робити?" | "Що представляє?" |
Дві ролі класу
👥 Клас як модуль:
- Архітектурна одиниця побудови програмної системи
- Програма - це сукупність класів, об'єднаних у проекти та простори імен
- Відповідає за структуру та організацію коду
📊 Клас як тип даних:
- Має певну смислову нагрузку
- Визначає структуру даних та поведінку об'єктів
- Використовується для створення екземплярів (об'єктів)
using System; // Клас як модуль та тип даних // 🐸 Клас описує, що таке жаба class Frog { // ВЛАСТИВОСТІ - які дані є у жаби public string Name; public int JumpPower; public string Color; // КОНСТРУКТОР - метод для створення жаби з параметрами public Frog(string name, int jumpPower, string color) { Name = name; JumpPower = jumpPower; Color = color; Console.WriteLine($"Створено нову жабу: {name}!"); } // МЕТОДИ - що може робити жаба public void Croak() { Console.WriteLine($"{Name}: Ква-ква! Я готова до біології!"); } public void Jump() { Console.WriteLine($"{Name} ({Color}) стрибає на {JumpPower} см! 🐸"); } } // 🎯 Програма створює КОНКРЕТНІ ОБ'ЄКТИ-жаби class Program { static void Main() { // Створюємо ОБ'ЄКТИ за допомогою конструктора Frog кваква = new Frog("Кваква", 42, "зелений"); Frog леся = new Frog("Леся", 35, "коричневий"); Frog бульба = new Frog("Бульба", 50, "жовтий"); // Викликаємо методи об'єктів кваква.Croak(); леся.Jump(); бульба.Croak(); бульба.Jump(); } }
🎮 Гра: Створи свій об'єкт-жабу!
Клас: "Frog" 🐸
Спробуй створити різних жабок!
Платформа Microsoft .NET Framework
🏗️ Каркасний підхід - це як конструктор LEGO:
🔷 Каркас (постійна частина) - це як основа з LEGO, яка завжди однакова. Вона задає основну форму та структуру.
🔶 Змінні модулі (змінна частина) - це різні деталі LEGO, які ти вставляєш в основу.
(Постійна частина)
(Змінна частина)
Що таке Framework?
Фреймворк - це каркас, структура, яка надає:
- 🔄 Єдність для всіх мов програмування
- 📚 Стандартну бібліотеку класів
- ⚡ Середовище виконання
- 🔧 Інструменти розробки
Основні компоненти .NET Framework
📚 Статичний компонент - FCL (Framework Class Library):
- Бібліотека класів каркаса
- Типи даних, колекції, робота з файлами
- Графічні інтерфейси, мережеві можливості
⚡ Динамічний компонент - CLR (Common Language Runtime):
- Середовище виконання
- Керування пам'яттю
- Безпека виконання
- Управління виключеннями
Бібліотека класів каркаса FCL
✈️ .NET - це як міжнародний аеропорт:
Різні мови програмування (C#, VB.NET) - це різні авіакомпанії
Примітивні типи - це як базові паспортні дані:
- У C# цей тип називається
int - У Visual Basic цей тип називається
Integer - Але в обох випадках це той самий тип
Int32у системі .NET
// C# розробник пише: int number = 10; Int32 sameNumber = 10; // те саме! // VB розробник пише: ' Dim number As Integer = 10 ' Dim sameNumber As Int32 = 10 ' те саме!
Простір імен System
📚 FCL - це як величезна бібліотека:
Простору імен - це тематичні відділи в цій бібліотеці
System - головний відділ з основними "інструментами"
// Створюємо вікно програми Form myWindow = new Form(); myWindow.Text = "Моя перша програма!"; // Додаємо кнопку Button button = new Button(); button.Text = "Натисни мене!"; button.Location = new Point(50, 50); myWindow.Controls.Add(button); // Запускаємо вікно Application.Run(myWindow);
CLR та двоетапна компіляція
🌍 Створення програми в .NET - це як подорож з перекладом мов:
📝 Етап 1: Написання коду на C#
🔨 Етап 2: Компіляція в IL (проміжну мову)
⚡ Етап 3: Виконання під керівництвом CLR
(PE-файл .exe/.dll)
(JIT компіляція)
Що таке PE-файл?
📦 PE-файл містить:
- Код на IL - універсальні інструкції
- Метадані - інформація про код (як паспорт програми)
- Маніфест - інформація про залежності
Типи файлів:
.exe - запускається як окрема програма
.dll - бібліотека для використання в інших програмах
Переваги CLR:
- ♻️ Код на різних мовах працює разом
- 💾 Ефективне використання пам'яті (збірка сміття)
- 🛡️ Безпечне виконання ("пісочниця")
- 🔄 Один код працює на різних системах
- ⚡ JIT-компіляція (Just-In-Time)
using System; class Program { static void Main() { // Цей код буде скомпільовано в IL int x = 12 * 30; Console.WriteLine(x); // Виведе: 360 Console.ReadLine(); // Чекаємо натискання Enter } }
Синтаксис C# та основні прийоми
Робота з консоллю
using System; // імпорт простору імен System class Program { static void Main() { // Вивід тексту на консоль Console.WriteLine("Привіт, світ!"); // Ввід даних з консолі Console.Write("Введіть ваше ім'я: "); string name = Console.ReadLine(); Console.WriteLine($"Привіт, {name}!"); // Робота з числами int number = 42; Console.WriteLine($"Число: {number}"); } }
Директива using
Директива using дозволяє уникнути постійного вказіввання простору імен:
// Без using - потрібно повністю вказувати шлях System.Console.WriteLine("Привіт"); System.Int32 number = 10; // З using - простіше та чистіше using System; Console.WriteLine("Привіт"); int number = 10; // int == System.Int32
Ключові слова та ідентифікатори
⚠️ Увага з ключовими словами:
Якщо хочете використовувати ідентифікатор з ім'ям, що конфліктує з ключовим словом, додайте префікс @
// class class {...} // заборонено! class @class {...} // дозволено // Символ @ не є частиною ідентифікатора @myVariable // те саме, що і myVariable
Точка входу Main
Метод Main - це точка входу в програму. C# шукає статичний метод з ім'ям Main, який стає початком виконання.
// Найпростіший варіант static void Main() { Console.WriteLine("Привіт!"); } // З поверненням коду помилки static int Main() { Console.WriteLine("Все добре!"); return 0; // 0 = успіх } // З параметрами командного рядка static int Main(string[] args) { foreach (string arg in args) { Console.WriteLine(arg); } return 0; }
💡 Примеры задач
💡 Порада:
Якщо вашому методу Main потрібен доступ до закритих членів деякого класу, визначте метод Main всередині цього класу - це може бути простіше, ніж використання інструкцій верхнього рівня.
