Ціль:Створення класів, статичних методів та методів об'єктів, використання конструкторів для створення екземплярів класу
Методичні вказівки:
C# групує пов'язані поля, методи, властивості і події в структури даних, які називаються класами. З точки зору архітектури додатку, клас - це модуль, архітектурна одиниця побудови програмної системи. Модульність побудови - основна властивість програмних систем. З точки зору мови програмування, клас - це тип даних, задаючий реалізацію деякої абстракції даних, характерної для завдання, в інтересах якого створюється програмна система. Синтаксис опису класу:
[атрибути][модифікатори]class ім'я_класу[:список_батьків]
{
// тіло_класу
.....................
}
Зазвичай, клас має атрибут доступу public, що є значенням за умовчанням або internal. Методи містять описи операцій, доступних над об'єктами класу. Два об'єкти одного класу мають один і той же набір методів. Загальний вигляд оголошення методів:
[атрибути][модифікатори]{void|тип_результату_функції}
ім’я_метода ([список_формальних_аргументів])
Кожен метод має модифікатор доступу, що приймає одно з чотирьох значень: public, private, protected, internal. Атрибутом доступу за умовчанням є атрибут private.
У кожному класі існує конструктор. Конструктор - невід'ємний компонент класу. Немає класів без конструкторів. Конструктор є спеціальним методом класу, що дозволяє створювати об'єкти класу. Ім'я методу-конструктора повинне співпадати з ім'ям класу. Конструктор викликається при створенні об'єкту на базі визначення класу. Можна визначити конструктори з будь-яким числом параметрів. Конструктори без параметрів називається конструкторами за умовчанням. У наступному прикладі показано визначення класу з конструктором за умовчанням (рядки 4-7) і конструктором, що приймає як значення строкове вираження (з параметром) (строки 8-11). Потім цей клас використовує кожного з них (рядки 22, 25):
1 class SampleClass
2 {
3 string greeting;
4 public SampleClass()
5 {
6 greeting = "Hello, World";
7 }
8 public SampleClass(string message)
9 {
10 greeting = message;
11 }
12 public void SayHello()
13 {
14 System.Console.WriteLine(greeting);
15 }
16 }
17 class Program
18 {
19 static void Main(string[] args)
20 {
21 // використання конструктору за умовчанням
22 SampleClass sampleClass1 = new SampleClass();
23 sampleClass1.SayHello();
24 // використання конструктору з параметром
25 SampleClass sampleClass2=new ampleClass("Hello,Mars");
26 sampleClass2.SayHello();
27 }
28 }
Перевантаженням називається створення різних методів з одним ім'ям. У попередньому прикладі такими методами є конструктори SampleClass(). Компілятору відомо, який метод слід використати, оскільки під час кожного створення об'єкту надається список аргументів (якщо такі є). В наступному прикладі демонструється використання перевантаження методу:
class MyClass { static string myMethod(string precip, string country, string location) { return string.Format("The {0} in {1} stays mainly in the {2}.",precip, country, location); } static string myMethod(string precip, string country) { return myMethod(precip, country, "plain"); } static string myMethod() { return myMethod("rain", "Spain", "plain"); } static void Main(string[] args) { System.Console.WriteLine(myMethod()); System.Console.WriteLine(myMethod("snow", "Walla Walla")); } } |
class MyClass
{
static string myMethod (string precip, string country, string location)
{
return string.Format("The {0} in {1} stays mainly in the {2}.",precip, country, location);
}
static string myMethod (string precip, string country)
{
return myMethod(precip, country, "plain");
}
static string myMethod ()
{
return myMethod("rain", "Spain", "plain");
}
static void Main(string[] args)
{
System.Console.WriteLine(myMethod());
System.Console.WriteLine(myMethod("snow",Walla Walla"));
}
}
Перевантаження методів можна використати в поточному додатку, в якому методи, яки розраховують відстань між точками, можуть бути з одним ім'ям та відрізнятись набором параметрів.
Розглянемо деякий клас Parallelogramm, і на його прикладі відстежимо створення і ініціалізацію об'єктів:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 namespace ConsoleApplication1111
6 {
7 class Program
8 {
9 static void Main(string[] args)
10 {
11 Parallelogramm p = new Parallelogramm (4,3,2);
12 Console.WriteLine("Pl_p="+Parallelogramm.ploshad(p));
13 Console.WriteLine("Pr_p=" + p.perimetr());
14 Console.ReadKey();
15 }
16 }
17 class Parallelogramm
18 {
19 int a,b,h;
20 public Parallelogramm (int a,int b,int h)
21 {
22 this.a=a;
23 this.b=b;
24 this.h=h;
25 }
26 public static double ploshad(Parallelogramm P)
27 {
28 return (P.a *P.h);
29 }
30 public double perimetr()
31 {
32 return (2*this.a+2*this.b);
33 }
34 }
35 }
В класі Parallelogramm використовується метод конструктора класу (рядки 20-25), реалізовані методи знаходження площі (рядки 26-29) і периметра (рядки 30-33) паралелограма. Зверніть увагу на використовування ключового слова this в прикладі, в даному випадку воно використовується для того, щоб розрізняти звернення до змінних класу і змінних методу.
Для створення об'єкту потрібно використовувати ключове слово new, що генерує екземпляр класу. В рядку 11 ініціалізувався об'єкт шляхом виклику конструктора з класу Parallelogramm з параметрами. Після цього можна звертатися до методів і змінних допоміжного класу за допомогою операції “.”, подібний обіг вказаний в рядках 12-13.
У поточній лабораторній роботі допоміжний клас міститиме усі перераховані в завданні методи. Причому, перший метод завдання буде статичним, інші будуть прив'язані до об'єкту. Необхідно створити три об'єкти: в якості об'єкту в роботі виступає точка на площині, атрибути об'єкту - координати точки х, у. Для створення і ініціалізації об'єкту необхідно створити конструктор з параметрами, який прийматиме координати точки, як параметри:
...
public class Point {
double x, y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public Point() {
this(0, 0); // виклик конструктора с двома
параметрами
}
...
}
У класі Point є два конструктори. Один, загальніший, з двома параметрами, призначений для конструювання точки площини із заданими координатами. Інший, без параметрів, будує точку з координатами (0, 0). У нім для економії коду просто викликається перший з конструкторів з параметрами (0, 0). Є одно обмеження на виклик одного конструктора з іншого. Такий виклик має бути першим оператором в викликаючому конструкторі.
& Завдання до лабораторної роботи 4:
Створити клас «Двомірна точка». Реалізувати в класі конструктор за умовчанням (без параметрів) і с параметрами, ряд методів для роботи з точками площини:
· Відстань між двома точками.
· Відстань від даної точкі до іншої точкі.
· Відстань від даної точкі до початку координат.
· Зсув точкі по осі Х на задану величину.
· Такий же зсув по осі У.
· Два методи для отримання Х- і У-коордінати точкі.
· Перевірити роботу цих методів.
Контрольні питання:
1. Поняття об'єкту.
2. Що в програмі виступає об'єктом?
3. Як створюється об'єкт?
4. Які атрибути цього об'єкту?
5. Що таке конструктор?
6. Які конструктори є перевантаженими?
7. У чому відмінність перших двох методів додатку?
8. До яких категорій вони відносяться?
9. Назначення ключового слова this у поточному застосуванні?
Зміст звіту:
звіт містить постановку задачі, надруковану програму, результат виконання та висновки. Для захисту роботи необхідно знати відповіді на контрольні питання до лабораторної роботи 4.
H Домашнє завдання
Пропрацювати тему призначену для самостійного вивчення по поточній темі (дивися конспект лекцій)