Тема – Створення об’єктів

Ціль:Створення класів, статичних методів та методів об'єктів, використання конструкторів для створення екземплярів класу

Методичні вказівки:

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 Домашнє завдання

Пропрацювати тему призначену для самостійного вивчення по поточній темі (дивися конспект лекцій)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: