1.30M
Категория: ПрограммированиеПрограммирование

Класи та їх об’єкти у програмуванні. Заняття 2. Структура класу

1.

Кафедра комп’ютерних інформаційних технологій
Навчальна дисципліна
«Об’єктно-орієнтоване програмування»
Тема 1. Класи та їх об’єкти у програмуванні
Заняття 2. Структура класу

2.

Навчальні питання
1. Поля
2. Методи
3. Конструктори
4. Властивості

3.

Структура класу
Члени класу
Дані-члени
Функції-члени
Поля
Методи
Конструктори
Константи
Індексатори
Операції
Події
Фіналізатор
Деконструктор
Властивості

4.

Поля
Поле – змінна, що є членом класу або структури
class Book
{
private string title;
private string author;
private int age;
private int page;
Book
-
}
НЕ ВИКОРИСТОВУЙТЕ ВІДКРИТІ ПОЛЯ
title:string
author:string
page:int
year:int

5.

Константи
Константа – статичне поле, значення якого не змінюється;
ініціалізується на етапі компіляції (compile time)
class Book
{
private string title;
private string author;
private int age;
private int page;
private const int START_PAGE = 1;
}
Константа може
бути визначена
лише як
вбудований
числовий тип,
логічний тип,
символ, строка
та перелічення

6.

Поля для читання
Для полів з модифікатором readonly заборонено зміну
значень після їх ініціалізації.
class Book
{
private string title;
private string author;
private int age;
private int page;
private readonly int startPage = 1;
}
БУДЬ-ЯКЕ ЗНАЧЕННЯ, ЯКЕ МОЖЕ БУТИ
ЗМІНЕНО В МАЙБУТНЬОМУ, НЕ ПОВИННО
БУТИ КОНСТАНТОЮ
Ініціалізація
полів з
модифікатором
readonly можлива
через
ініціалізатор та
через конструктор

7.

Статичні поля
Значення статичних полів загальні для всього класу
та, відповідно, всіх його об’єктів
class SomeCar
{
private string vinCode;
private static int wheelCount;
}
SomeCar
- vinCode:string
- wheelCount:int

8.

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

9.

Методи
class Employee {
this – посилання на екземпляр класу
private string name;
Основне призначення - вирішення
private string surname;
конфлікту імен
private double amount;
private double bonus;
Для вирішення неоднозначності
private static double commonBonus;
іменування статичних членів
використовується ім’я класу
public double GetAmount()
{
return amount + bonus + commonBonus;
}
public void GiveBonus(double bonus)
{
this.bonus += bonus;
}
public static void GiveCommonBonus(double commonBonus)
{
Employee.commonBonus += commonBonus;
}
}

10.

Методи
class Employee {
private string _name;
private string _surname;
private double _amount;
private double _bonus;
private static double _commonBonus;
public double GetAmount()=> _amount + _bonus + _commonBonus;
public void GiveBonus(double bonus) => _bonus += bonus;
public static void GiveCommonBonus(double commonBonus)=>
_commonBonus += commonBonus;
}
Employee
- _name:string
- _surname:string
- _amount:double
- _bonus:double
- _commonBonus:double
+ GiveBonus(double bonus)
+ GiveCommonBonus(double bonus)

11.

Конструктори
Конструктор – це метод, що викликається
створенні об’єкту для ініціалізації його полів
при
За відсутності конструктора він не явно створюється
компілятором (не містить параметрів) – неявний
конструктор
При визначенні хоча б одного конструктора неявний
конструктор не створюється
class Employee {
//fields here
public Employee(string name, string surname, double amount) {
_name = name;
_surname = surname;
_amount = amount;
}
//methods here
}

12.

Конструктори
class Program {
static void Main(string[] args)
{
Employee workerOne = new Employee("Vasj", "Vasilev", 3700.0);
Employee workerTwo = new Employee("Petj", "Petrov", 3700.0);
workerOne.GiveBonus(500);
Employee.GiveCommonBonus(600);
Console.WriteLine($"WorkerOne amount:{workerOne.GetAmount()}");
Console.WriteLine($"WorkerTwo amount:{workerTwo.GetAmount()}");
Console.ReadKey();
}
}

13.

Конструктори класів та структур
Можливе використання екземпляру без
виклику конструктора
Можливе перевантаження конструктора
Конструктор зобов’язаний ініціалізувати
всі поля
Структура
Клас
ТАК
НІ
ТАК
ТАК
ТАК
НІ
НІ
ТАК
Можливо визначити конструктор без
параметрів

14.

Статичний конструктор
Статичний конструктор – конструктор з модифікатором
static, що викликається тільки один раз при першому
зверненні
до
класу,
основне
його
призначення
ініціалізація статичних полів.
Статичний конструктор не може містити параметрів, а
отже, не передбачає перевантаження. Також статичний
конструктор не може мати жодного модифікатору доступу.
class Employee {
//fields here
static Employee() {
_commonBonus = 0.99;
}
//rest of class here
}

15.

Властивості
Властивості – це набори функцій, які можуть бути доступні
таким же способом, як загальнодоступні поля класу.
class Product {
private readonly string _name;
private double _price;
private readonly DateTime _release;
public Product(string name, double price) {
_name = name;
Price = price;
_release = DateTime.Now;
}
public double Price {
get { return _price; }
set { _price = value > 0.05 ? value : 0.05;}
}
}
public override string ToString(){
return $"{_name} {Price}";
Метод
доступуset
getвикористовується
використовуєтьсяпри
призапису
читанні
даних
Метод
доступу
даних
до
} Неявний
параметр value приймає значення властивості
властивості

16.

Властивості
class Product {
private readonly string _name;
private double _price;
private readonly DateTime _release;
public Product(string name, double price) {
_name = name;
Price = price;
_release = DateTime.Now;
}
public double Price{
get => _price;
set => _price = value > 0.05 ? value : 0.05;
}
public override string ToString()=> $"{_name} {Price}";
}
Властивості можуть містити як get та set так і
тільки щось одне.

17.

Властивості
class Program {
static void Main(string[] args)
{
Product bread = new Product("Ukr Bread", 12.10);
bread.Price = -10.10;
Console.WriteLine(bread);
Console.ReadKey();
}
}

18.

Властивості
class Product {
private readonly string _name;
private double _price;
private readonly DateTime _release = DateTime.Now;
public Product() => _name = "Noname";
public Product(string name, double price) {
_name = name;
Price = price;
}
public double Price{
get => _price;
private set => _price = value > 0.05 ? value : 0.05;
}
public override string ToString()=> $"{_name} {Price}";
}
Один з засобів доступу(get або set) може мати
власний модифікатор доступу

19.

Властивості
class Program
{
static void Main(string[] args)
{
Product bread = new Product("Ukr Bread", 12.10);
bread.Price = -10.10;
Product noname = new Product();
noname.Price = 0.99;
Product noname1 = new Product() { Price = 0.99 };
Product noname2 = new Product { Price = 0.99 };
Console.ReadKey();
}
}
Дозволяється ініціалізувати властивості при створенні
об’єкту. При необхідності ініціалізації декількох
використовується кома.

20.

Автоматичні властивості
class Product {
//fields here
private bool _isSold;
//constructors here
public bool isSold { get ; set;}
public bool isSold {
get => _isSold;
set => _isSold = value;
}
//properties
and methods
Автоматична властивість –
скорочена форма
властивості, яка зчитує
та записує данні у поле
типу властивості, при
чому поле неявно
генерується компілятором.
}
Автоматичні властивості на відміну від звичайних можуть
бути ініціалізовані початковим значенням
public double minPrice { get; } = 0.05;

21.

class Product {
private readonly string _name;
private double _price;
private readonly DateTime _release = DateTime.Now;
public Product() => _name = "Noname";
public Product(string name, double price)
{
_name = name;
Price = price;
}
public bool isSold { get ; set;}
Product
- _name:string
- _price:double
- _release:DateTime
+ <<property>> isSold:bool
+ <<property>> Price:double
+ <<property>> MinPrice:double
+ ToString():string
public double Price {
get => _price;
set => _price = value > MinPrice ? value : MinPrice;
}
public double MinPrice { get; } = 0.05;
public override string ToString()=> $"{_name} {Price}";
}

22.

Завдання на самостійну підготовку
1. Законспектувати основні визначення
2. Виконати всі приклади, що були продемонстровані
English     Русский Правила