Скачать презентацию С ООП Классы 03 C ООП Классы Скачать презентацию С ООП Классы 03 C ООП Классы

03_C#_Classes.ppt

  • Количество слайдов: 24

С#. ООП. Классы 03. C#. ООП. Классы С#. ООП. Классы 03. C#. ООП. Классы

План лекции q q q q Две роли классов Синтаксис описания класса Модификаторы доступа План лекции q q q q Две роли классов Синтаксис описания класса Модификаторы доступа Методы-свойства Индексаторы Конструкторы класса Пример проектирования класса 03. C#. ООП. Классы 2

Синтаксис описания класса [атрибуты][модификаторы]class имя_класса[: список_родителей] {тело_класса} public class Rational {тело_класса} В теле класса Синтаксис описания класса [атрибуты][модификаторы]class имя_класса[: список_родителей] {тело_класса} public class Rational {тело_класса} В теле класса могут быть объявлены: q константы; q поля; q конструкторы и деструкторы; q методы; q события; q делегаты; q классы (структуры, интерфейсы, перечисления). 03. C#. ООП. Классы 3

Методы-свойства Пять наиболее употребительных стратегий: q чтение, запись (Read, Write); q чтение, запись при Методы-свойства Пять наиболее употребительных стратегий: q чтение, запись (Read, Write); q чтение, запись при первом обращении (Read, Write -once); q только чтение (Read-only); q только запись (Write-only); q ни чтения, ни записи (Not Read, Not Write). 03. C#. ООП. Классы 4

Методы-свойства public class Person { //поля (все закрыты) string fam= Методы-свойства public class Person { //поля (все закрыты) string fam="", status="", health=""; int age=0, salary=0; //методы - свойства ///

///стратегия: Read, Write-once (Чтение, запись при ///первом обращении) /// public string Fam { set {if (fam == "") fam = value; } get {return(fam); } } 03. C#. ООП. Классы 5

Методы-свойства /// <summary> стратегия: Read-only(Только чтение) </summary> public string Status { get {return(status); } Методы-свойства ///

стратегия: Read-only(Только чтение) public string Status { get {return(status); } } /// стратегия: Read, Write (Чтение, запись) public int Age { set { age = value; if(age < 7)status ="ребенок"; else if(age <17)status ="школьник"; else if (age < 22)status = "студент"; else status = "служащий"; } get {return(age); } 03. C#. ООП. Классы 6

Методы-свойства /// <summary> ///стратегия: Write-only (Только запись) /// </summary> public int Salary { set Методы-свойства ///

///стратегия: Write-only (Только запись) /// public int Salary { set {salary = value; } } } 03. C#. ООП. Классы 7

Пример работы с полями public void Test. Person. Props() { Person pers 1 = Пример работы с полями public void Test. Person. Props() { Person pers 1 = new Person(); pers 1. Fam = "Петров"; pers 1. Age = 21; pers 1. Salary = 1000; Console. Write. Line ("Фам={0}, возраст={1}, статус={2}", pers 1. Fam, pers 1. Age, pers 1. Status); pers 1. Fam = "Иванов"; pers 1. Age += 1; Console. Write. Line ("Фам={0}, возраст={1}, статус={2}", pers 1. Fam, pers 1. Age, pers 1. Status); }//Test. Person. Props 03. C#. ООП. Классы 8

Индексаторы const int Child_Max = 20; //максимальное число детей Person[] children = new Person[Child_Max]; Индексаторы const int Child_Max = 20; //максимальное число детей Person[] children = new Person[Child_Max]; int count_children=0; //число детей public Person this[int i] //индексатор { get {if (i>=0 && i< count_children)return(children[i]); else return(children[0]); } set { if (i==count_children && i< Child_Max) {children[i] = value; count_children++; } } } 03. C#. ООП. Классы 9

Индексаторы public void Test. Person. Children() { Person pers 1 = new Person(), pers Индексаторы public void Test. Person. Children() { Person pers 1 = new Person(), pers 2 = new Person(); pers 1. Fam = "Петров"; pers 1. Age = 42; pers 1. Salary = 10000; pers 1[pers 1. Count_children] = pers 2; pers 2. Fam ="Петров"; pers 2. Age = 21; pers 2. Salary = 1000; Person pers 3= new Person("Петрова"); pers 1[pers 1. Count_children] = pers 3; pers 3. Fam ="Петрова"; pers 3. Age = 5; Console. Write. Line ("Фам={0}, возраст={1}, статус={2}", pers 1. Fam, pers 1. Age, pers 1. Status); Console. Write. Line ("Сын={0}, возраст={1}, статус={2}", pers 1[0]. Fam, pers 1[0]. Age, pers 1[0]. Status); Console. Write. Line ("Дочь={0}, возраст={1}, статус={2}", pers 1[1]. Fam, pers 1[1]. Age, pers 1[1]. Status); } 03. C#. ООП. Классы 10

Индексаторы 03. C#. ООП. Классы 11 Индексаторы 03. C#. ООП. Классы 11

Конструкторы и деструкторы класса Person pers 1 = new Person(), pers 2 = new Конструкторы и деструкторы класса Person pers 1 = new Person(), pers 2 = new Person(); Person pers 3= new Person("Петрова"); static Person() { Console. Write. Line("Выполняется статический конструктор!"); } ~Person() { //Код деструктора } 03. C#. ООП. Классы 12

Пример проектирования класса /// <summary> Класс Rational определяет новый тип данных /// рациональные числа Пример проектирования класса ///

Класс Rational определяет новый тип данных /// рациональные числа и основные операции над ними - сложение, /// умножение, вычитание и деление. Рациональное число задается /// парой целых чисел (m, n) и изображается обычно в виде дроби m/n. /// Число m называется числителем, n - знаменателем. Для /// каждого рационального числа существует множество его /// представлений, например, 1/2, 2/4, 3/6, 6/12 - задают /// одно и тоже рациональное число. Среди всех представлений /// можно выделить то, в котором числитель и знаменатель /// взаимно несократимы. Такой представитель будет храниться /// в полях класса. Операции над рациональными числами /// определяются естественным для математики образом /// public class Rational { // Описание тела класса Rational }//Rational 03. C#. ООП. Классы 13

Конструкторы класса Rational /// <summary> Конструктор класса. Создает рациональное число /// m/n, эквивалентное a/b, Конструкторы класса Rational ///

Конструктор класса. Создает рациональное число /// m/n, эквивалентное a/b, но со взаимно несократимыми /// числителем и знаменателем. Если b=0, то результатом /// является рациональное число 0 -пара (0, 1). /// числитель /// знаменатель public Rational(int a, int b) { if(b==0) {m=0; n=1; } else { //приведение знака if( b<0) {b=-b; a=-a; } //приведение к несократимой дроби int d = nod(a, b); m=a/d; n=b/d; } } 03. C#. ООП. Классы 14

Методы класса Rational /// <summary> /// Закрытый метод класса. /// Возвращает наибольший общий делитель Методы класса Rational ///

/// Закрытый метод класса. /// Возвращает наибольший общий делитель чисел a, b /// /// первое число /// второе число, положительное /// НОД(a, b) int nod(int m, int n) { int p=0; m=Math. Abs(m); n =Math. Abs(n); if(n>m){p=m; m=n; n=p; } do { p = m%n; m=n; n=p; }while (n!=0); return(m); }//nod 03. C#. ООП. Классы 15

Печать рациональных чисел public void Print. Rational(string name) { Console. Write. Line(

Тестирование создания рациональных чисел public void Test. Create. Rational() { Rational r 1=new Rational(0, Тестирование создания рациональных чисел public void Test. Create. Rational() { Rational r 1=new Rational(0, 0), r 2 = new Rational(1, 1); Rational r 3=new Rational(10, 8), r 4 = new Rational(2, 6); Rational r 5=new Rational(4, -12), r 6 = new Rational (-12, -14); r 1. Print. Rational("r 1: (0, 0)"); r 2. Print. Rational("r 2: (1, 1)"); r 3. Print. Rational("r 3: (10, 8)"); r 4. Print. Rational("r 4: (2, 6)"); r 5. Print. Rational("r 5: (4, -12)"); r 6. Print. Rational("r 6: (-12, -14)"); } 03. C#. ООП. Классы 17

Операции над рациональными числами. Сложение public Rational Plus(Rational a) { int u, v; u Операции над рациональными числами. Сложение public Rational Plus(Rational a) { int u, v; u = m*a. n +n*a. m; v= n*a. n; return( new Rational(u, v)); }//Plus public static Rational operator +(Rational r 1, Rational r 2) { return (r 1. Plus(r 2)); } 03. C#. ООП. Классы 18

Операции над рациональными числами. Сложение public void Test. Plus. Rational() { Rational r 1=new Операции над рациональными числами. Сложение public void Test. Plus. Rational() { Rational r 1=new Rational(0, 0), r 2 = new Rational(1, 1); Rational r 3=new Rational(10, 8), r 4 = new Rational(2, 6); Rational r 5=new Rational(4, -12), r 6 = new Rational(-12, -14); Rational r 7, r 8, r 9, r 10, r 11, r 12; r 7 = r 1. Plus(r 2); r 8 = r 3. Plus(r 4); r 9 = r 5. Plus(r 6); r 10 = r 1+r 2; r 11 = r 3+r 4; r 12 = r 5+r 6+r 10+r 11; r 1. Print. Rational("r 1: (0, 0)"); r 2. Print. Rational("r 2: (1, 1)"); r 3. Print. Rational("r 3: (10, 8)"); r 4. Print. Rational("r 4: (2, 6)"); r 5. Print. Rational("r 5: (4, -12)"); r 6. Print. Rational ("r 6: (-12, -14)"); r 7. Print. Rational("r 7: (r 1+r 2)"); r 8. Print. Rational ("r 8: (r 3+r 4)"); r 9. Print. Rational("r 9: (r 5+r 6)"); r 10. Print. Rational ("r 10: (r 1+r 2)"); r 11. Print. Rational("r 11: (r 3+r 4)"); r 12. Print. Rational("r 12: (r 5+r 6+r 10+r 11)"); } 03. C#. ООП. Классы 19

Операции над рациональными числами. Вычитание public Rational Minus(Rational a) { int u, v; u Операции над рациональными числами. Вычитание public Rational Minus(Rational a) { int u, v; u = m*a. n - n*a. m; v= n*a. n; return( new Rational(u, v)); }//Minus public static Rational operator -(Rational r 1, Rational r 2) { return (r 1. Minus(r 2)); } 03. C#. ООП. Классы 20

Операции над рациональными числами. Умножение public Rational Mult(Rational a) { int u, v; u Операции над рациональными числами. Умножение public Rational Mult(Rational a) { int u, v; u = m*a. m; v= n*a. n; return( new Rational(u, v)); }//Mult public static Rational operator *(Rational r 1, Rational r 2) { return (r 1. Mult(r 2)); } 03. C#. ООП. Классы 21

Операции над рациональными числами. Деление public Rational Divide(Rational a) { int u, v; u Операции над рациональными числами. Деление public Rational Divide(Rational a) { int u, v; u = m*a. n; v= n*a. m; return( new Rational(u, v)); }//Divide public static Rational operator /(Rational r 1, Rational r 2) { return (r 1. Divide(r 2)); } 03. C#. ООП. Классы 22

Пример применения public void Test. Oper. Rational() { Rational r 1=new Rational(1, 2), r Пример применения public void Test. Oper. Rational() { Rational r 1=new Rational(1, 2), r 2 = new Rational(1, 3); Rational r 3, r 4, r 5, r 6 ; r 3 = r 1 - r 2; r 4 = r 1*r 2; r 5 = r 1/r 2; r 6 = r 3+r 4*r 5; r 1. Print. Rational("r 1: (1, 2)"); r 2. Print. Rational("r 2: (1, 3)"); r 3. Print. Rational("r 3: (r 1 -r 2)"); r 4. Print. Rational("r 4: (r 1*r 2)"); r 5. Print. Rational("r 5: (r 1/r 2)"); r 6. Print. Rational("r 6: (r 3+r 4*r 5)"); } 03. C#. ООП. Классы 23

Вопросы ? ? ? 03. C#. ООП. Классы 24 Вопросы ? ? ? 03. C#. ООП. Классы 24