1.61M
Category: programmingprogramming

Класи та їх об’єкти у програмуванні Заняття 4. Індексатори та операції

1.

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

2.

Навчальні питання
1. Індексатори
2. Операції
3. Методи розширення

3.

Рекомендована література
1. Офіційна документація C# http://msdn.microsoft.com;
2. Брила А.Ю., Антосяк П.П., Глебена М.І., Чупов С.В.,
Семйон
І.В.
Основи
об’єктно-орієнтованого
програмування у C#. Методичні вказівки до
лабораторних робіт для студентів І-го курсу
математичного факультету спеціальності "Прикладна
математика". – Ужгород, 2014. – 73 с.
3. Об’єктно-орієнтоване програмування: [Підручник] / В.В.
Бублик. – К.: ІТкнига, 2015. – 624 с.: іл.
4. С# 6.0. Справочник. Полное описание языка, 6-е изд. :
Пер. с англ. - М. : ООО "И.Д. Вильяме", 2016. - 1040 с.: ил.
- Парал. тит. англ.

4.

ЛІТЕРАТУРА
1. Шилдт Герберт - C# 4.0 полное
руководство – 2011
2. Эндрю Троелсен "Язык
программирования C# 5.0 и
платформа .NET 4.5" – 2013
3. Стиллмен, Дж. Грин Изучаем C#.
3-е изд – 2017
4. Джозеф Албахари C# 6.0.
Справочник. Полное описание
языка – 2017

5.

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

6.

Індексатори
class Book {
Індексатори
– функції-члени, які забезпечують доступ
private
string _title;
до
внутрішніх
private
string[] підтипів
_authors; із застосуванням синтаксису,
схожого на синтаксис масивів.
public Book(string title, params string[] authors){
_title = title;
_authors = authors;
}
public string GetAuthor(int index){
return _authors[index];
}
public void SetAuthor(int index, string author){
_authors[index] = author;
}
public int CountOfAuthors{
get { return _authors.Length; }
}
//properties for title and ToString here
}

7.

Індексатори
Індексатори – функції-члени, які забезпечують доступ
до внутрішніх підтипів із застосуванням синтаксису,
схожого на синтаксис масивів.
class Program {
static void Main(string[] args){
Book book = new Book("C# 6.0 and the .NET 4.6 Framework",
"Troelsen Andrew",
"Japikse Philip");
Console.WriteLine($"{book.Title} has {book.CountOfAuthors}:");
for (int i = 0; i < book.CountOfAuthors; i++){
Console.WriteLine($"{book.GetAuthor(i)}");
}
Console.ReadKey();
}
}

8.

Індексатори
Індексатори – функції-члени, які забезпечують доступ
до внутрішніх підтипів із застосуванням синтаксису,
схожого на синтаксис масивів.
class Book{
//rest of class members here
public string GetAuthor(int index){
return _authors[index];
}
public void SetAuthor(int index, string author){
_authors[index] = author;
}
public string this[int index]//indexer
{
get { return _authors[index]; }
set { _authors[index] = value; }
}
}

9.

Індексатори
Індексатори – функції-члени, які забезпечують доступ
до внутрішніх підтипів із застосуванням синтаксису,
схожого на синтаксис масивів.
class Program {
static void Main(string[] args){
Book book = new Book("C# 6.0 and the .NET 4.6 Framework",
"Troelsen Andrew",
"Japikse Philip");
Console.WriteLine($"{book.Title} has {book.CountOfAuthors}:");
for (int i = 0; i < book.CountOfAuthors; i++){
Console.WriteLine($"{book[i]}");
}
Console.ReadKey();
}
}

10.

Операції
Операції – це функції, що дозволяють перевантажити
базові оператори, наприклад +, - і т.д.
class Program
{
static void Main(string[] args)
{
string str1 = "Hello";
string str2 = " world";
string s1 = String.Concat(str1, str2);
string s2 = str1 + str2;
Console.ReadKey();
}
}
Book
title:string
author:string
page:int
year:int

11.

Операції
Операції – це функції, що дозволяють перевантажити
базові оператори, наприклад +, - і т.д.
class СomplexNumber
{
public СomplexNumber(int real, int imaginary)
{
Real = real;
Imaginary = imaginary;
}
public int Real { get; set; }
public int Imaginary { get; set; }
public static СomplexNumber Sum(СomplexNumber number1,
СomplexNumber number2){
return new СomplexNumber(number2.Real+ number1.Real,
number2.Imaginary+number1.Imaginary);
}
public override string ToString()=>$"{Real}+{Imaginary}i";
}

12.

Операції
Операції – це функції, що дозволяють перевантажити
базові оператори, наприклад +, - і т.д.
class СomplexNumber
{
public СomplexNumber(int real, int imaginary)
{
Для визначення операції
Real = real;
Imaginary = imaginary;
використовується ключове
}
слово operator
public int Real { get; set; }
public int Imaginary { get; set; } Операції завжди статичні
та відкриті
//Sum methods here
public static СomplexNumber operator +(СomplexNumber number1,
СomplexNumber number2){
return new СomplexNumber(number2.Real+ number1.Real,
number2.Imaginary+number1.Imaginary);
}
public override string ToString()=>$"{Real}+{Imaginary}i";
}

13.

Операції
Операції – це функції, що дозволяють перевантажити
базові оператори, наприклад +, - і т.д.
class Program
{
static void Main(string[] args)
{
ComplexNumber number1 = new ComplexNumber(10, 10);
ComplexNumber number2 = new ComplexNumber(20, 10);
ComplexNumber result1 = ComplexNumber.Sum(number1, number2);
ComplexNumber result2 = number1 + number2;
Console.WriteLine(result1);
Console.WriteLine(result2);
Console.ReadKey();
}
}

14.

class ComplexNumber{
public ComplexNumber(){}
Операції
public ComplexNumber(int real, int imaginary){
Real = real;
В більшості випадків
Imaginary = imaginary;
}
операції використовують
public int Real { get; set; }
public int Imaginary { get; set; }
вже існуючі методи
public static ComplexNumber Sum(ComplexNumber number1,
ComplexNumber number2)
=> new ComplexNumber(number2.Real + number1.Real,
number2.Imaginary + number1.Imaginary);
public static ComplexNumber operator +(ComplexNumber number1,
ComplexNumber number2)
=> Sum(number1, number2);
public override string ToString() => $"{Real}+{Imaginary}i";
}

15.

Операції
class ComplexNumber{
//rest of class here
public static bool operator true(ComplexNumber number){
return number.Imaginary!=0;
}
public static bool operator false(ComplexNumber number){
return number.Imaginary == 0;
}
public static bool operator ==(ComplexNumber number1,
ComplexNumber number2){
return number1.Real == number2.Real &&
number1.Imaginary == number2.Imaginary;
}
public static bool operator !=(ComplexNumber number1,
ComplexNumber number2){
return number1.Real != number2.Real ||
number1.Imaginary != number2.Imaginary;
}
}

16.

Операції
class Program
{
static void Main(string[] args)
{
ComplexNumber number1 = new ComplexNumber(10, 0);
ComplexNumber number2 = new ComplexNumber(20, 10);
ComplexNumber number3 = new ComplexNumber(20, 10);
if (number1)
Console.WriteLine(number1);
if(number2)
Console.WriteLine(number2);
if(number2==number3)
Console.WriteLine("equal");
Console.ReadKey();
}
}

17.

Операції
static void Main(string[] args){
implicit – визначає неявні
//rest of logic
перетворення типів
double d = 11;
// implicit
ComplexNumber number = 10;
// (розширення
implicit
типів, висхідне)
int n = (int) d;
// explicit
explicit – визначає явні
int realPart = (int) number; // explicit
//rest of logic
перетворення типів (звуження
типів, низхідне)
}
class ComplexNumber{
//rest of class here
public static explicit operator int(ComplexNumber number){
return number.Real;
}
public static implicit operator ComplexNumber(int number){
return new ComplexNumber(number, 0);
}
}

18.

Операції
ComplexNumber
- _real:int
- _imaginary:int
+ <<property>> Real:int
+ <<property>> Imaginary:int
+ Sum(a:ComplexNumber , b:ComplexNumber):ComplexNumber
+ operator +(a:ComplexNumber ,
b:ComplexNumber):ComplexNumber
+ operator true(a:ComplexNumber):bool
+ operator false(a:ComplexNumber):bool
+ operator ==(a:ComplexNumber , b:ComplexNumber):bool
+ operator !=(a:ComplexNumber , b:ComplexNumber):bool
+ operator explicit(a:ComplexNumber):int
+ operator implicit (a:int ):ComplexNumber
+ <<indexer>> [index:int]:int
+ ToString():string

19.

Операції
//in ComplexNumber class
public int this[int index] {
get {
return index == 0 ? Real :
index == 1 ? Imaginary :
throw new IndexOutOfRangeException(); }
set{
switch (index){
case 0:
Real = value;
break;
case 1:
Imaginary = value;
break;
default:
throw new IndexOutOfRangeException();
}
}
}

20.

Методи розширення
Методи розширення – дозволяють додавати в існуючий тип
нові методи без зміни самого типу.
Методи розширення – статичні методи статичного класу в
яких до першого параметра (тип який розширюється) додано
модифікатор this.
Методи розширення викликаються так само як методи
екземпляра самого типу, який розширено.
Методи розширення не перекривають методи екземпляра.

21.

Методи розширення
class Program {
static void Main(string[] args){
string str = "Hello";
Console.WriteLine(str.Duplex().Reverce());
Console.ReadKey();
}
}
static class StringExtentions {
public static string Duplex(this string str){
return str + str;
}
public static string Reverce(this string str){
StringBuilder builder = new StringBuilder();
foreach (var s in str)
{
builder.Insert(0, s);
}
return builder.ToString();
}
}

22.

Методи розширення
string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit ";
Console.WriteLine(text.WordCount()); // 8
static class MyExtensions
{
public static int WordCount(this String str) =>
str.Split(new char[] { ' ', '.', '?' },
StringSplitOptions.RemoveEmptyEntries).Length;
}

23.

Методи розширення
class Program
{
static void Main(string[] args)
{
int foo = 345;
int fooz = 100;
bool bar = foo.IsGreaterThan(fooz);
Console.WriteLine($"is {foo} > {fooz} -> {bar}");
Console.Read();
}
}
static class MyExtensions
{
internal static bool IsGreaterThan(this int value, int compared) =>
value > compared;
}

24.

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