Основне меню  

   

Реклама  

Скачуйте відеуроки для створення сайту за допомогою SMS Joomla 

реклама

 

 

   

Ми в Facebook  

Калькулятор расчета пеноблоков смотрите на этом ресурсе
Все о каркасном доме можно найти здесь http://stroidom-shop.ru
Как снять комнату в коммунальной квартире смотрите тут comintour.net
   

Реклама в мережі  

   

Статистика  

Користувачі
1
Статті
180
Перегляди статей
621956
   

Пошук по сайту  

   

Ми знаходимось тут  

   

Посібник Delphi  

ДОСТУПНИЙ ВИКЛАД,

ЦІКАВІ ПРИКЛАДИ, ВИХІДНІ КОДИ.

ЦІНА ДИСКА З МАТЕРІАЛАМИ - 500 грн. 

Якщо ваша карта обслуговується ПриватБанком тоді переведіть потрібну суму через Приват24 на карту    5168 7573 0556 9925 або натисніть на посилання "Перейти до оплати", щоб здійснити миттєвий платіж без комісії. Перейти до оплати!

 Звертайтесь за адресою еmail:kuzbyt@ukr.net

 
   

Посібник по C#  

 Вивчаємо сучасну мову  програмування C# 7.0

ПРОГРАМУЄМО в VISUAL STUDIO 2017

ЦІНА ДИСКА З МАТЕРІАЛАМИ - 1000 грн. 

Якщо ваша карта обслуговується ПриватБанком тоді переведіть потрібну суму через Приват24 на карту    5168 7573 0556 9925 або натисніть на посилання "Перейти до оплати", щоб здійснити миттєвий платіж без комісії. Перейти до оплати!

 Звертайтесь за адресою еmail:kuzbyt@ukr.net

 
   

Випадкове фото  

   

Наш відеоканал  

   

Відвідування сайту  

Яндекс.Метрика

 

   

Відеокурс по С++  

   

Рекомендуємо:  

   

Сайти  

Українські уроки про ІТ

Єдина Країна! Единая Страна!

 

Українські уроки про програмування

 

 
   

1.   Агрегація

Агрегація – відношення типу "ціле–частина" між сутностями предметної області. У програмі агрегація виявляється як використання в описі класу атрибутів, які є об'єктами іншого класу.

Приклад . Агрегація

Нехай маємо клас, який описує точку на площині:

 Лістинг

class Point {

private double x, y;

// конструктори

Point() {x=0; y=0; }

Point(double xi, double yi) {x=xi; y=yi;}

public void setPoint(double xi, double yi) {x=xi; y=yi;};

public double getX(){return x;}

public double getY(){return y;}

// метод визначення відстані до іншої точки ар від даної

public double getDistance(Point ap) {

return Math.sqrt((x+ap.getX())*(x+ap.getX())+(y+ap.getY())*(y+ap.getY()));

}

}

Нехай треба описати клас трикутника на координатній площині. Трикутник визначається трьома вершинами, кожна з яких є точкою на площині, приклад класу для якої описано вище. Оскільки вершина є складовою частиною трикутника, то у даному випадку відношення "точка–трикутник" є відношенням агрегації. Опишемо клас трикутника.

Лістинг

class Triangle {

// агрегування трикутником сутності "точка"

private Point p1, p2, p3;

// конструктори, створюють об'єкти для всіх трьох вершин та

// ініціалізують їх за допомогою конструкторів класу Point

Triangle() {p1 = new Point(); p2 = new Point(); p3 = new Point();}

Triangle(double x1, double y1,double x2, double y2,double x3, double y3){

p1 = new Point(x1, y1); p2 = new Point(x2, y2); p3 = new Point(x3, y3);

}

// зміна координат вершин трикутника

public void setTriangle(double x1, double y1,double x2, double y2,

double x3, double y3){

p1.setPoint(x1, y1); p2.setPoint(x2, y2); p3.setPoint(x3, y3);

}

// отримання вершин трикутника

public Point getPoint1() {return p1;}

public Point getPoint2() {return p2;}

public Point getPoint3() {return p3;}

// метод, який обчислює периметр трикутника

public double getPerimeter() {

return p1.getDistance(p2)+p2.getDistance(p3)+p3.getDistance(p1);

}

}

Наступний фрагмент демонструє роботу з класами Point і Triangle.

Лістинг

public class pr3_10 {

public static void main (String[ ] args) {

Triangle t = new Triangle(1, 1, 4, 1, 1, 5);

System.out.println("Вершини трикутника:");

System.out.println("A("+t.getPoint1().getX()+"; "+t.getPoint1().getY()+")");

System.out.println("B("+t.getPoint2().getX()+"; "+t.getPoint2().getY()+")");

System.out.println("C("+t.getPoint3().getX()+"; "+t.getPoint3().getY()+")");

System.out.println("Периметр трикутника АВС: " + t.getPerimeter());

}

}

Результат роботи програми:

Вершини трикутника:

A(1.0; 1.0)

B(4.0; 1.0)

C(1.0; 5.0)

Периметр трикутника АВС: 19.51996980337792

2.   Успадкування

Інкапсуляція та поліморфізм є основною т.з. об’єктного програмування.  Для того щоб програмування використовувало об’єктно-орієнтовану парадигму, необхідно мати кілька класів,зв’язаних між собою ієрархічним співвідношенням.

Ієрархія, або успадкування – зв’язок між сутностями типу АКО (a kind of, тобто "родове-видове", "батько-нащадок","загальне-часткове" тощо).

 З точки зору програмування, даний тип зв'язку між сутностями задає автоматичне успадкування властивостей одного класу іншим. Це третій принцип об’єктно-орієнтованого програмування (ООП).Ієрархія класів відображає ієрархічні співвідношення між сутностями предметної області. Так, батьківський клас завжди описує ширше, більш загальне або примітивне поняття, а клас-нащадок (підклас) – уточнене, спеціалізоване, доповнене специфічними функціями чи можливостями. Всі нащадки одного батька успадковують від нього спільні (родові) властивості чи методи, але можуть мати і власні (видові).

 Прикладами можуть виступати довільні класифікаційні ієрархії: в математиці, біології, економіці тощо.

Приклади:

а) Сутність "чотирикутник" є батьківською (родовою) для сутностей "квадрат", "прямокутник", "ромб", "трапеція" тощо.

б) Сутність "людина" є батьківською для "студент","викладач", "адмінітстратор", "охоронець" тощо.

в) Сутність "транспорт" є батьківською для "автомобіль","літак", "корабель" тощо.

 Приклад . Ієрархічне співвідношення між сутностями

Розглянемо сутності "відрізок" (Segment) і "квадрат" (Square) у контексті змістовного відношення між собою.

class Segment {

// властивість "довжина відрізка"

double length;

// конструктори

Segment() { length=0; }

Segment (double x) { length=x; }

}

Сутність "квадрат", як і "відрізок" має один розмір – розмір ребра (точніше, ребер два, але вони однакові), тому і структуру має подібну. Разом з тим, квадрат також має властивість площу та периметр, які можна обчислити за ребром:

 class Square {

// властивість "довжина ребра"

double length;

// конструктори

Square() { length=0; }

Square (double x) { length=x; }

// обчислює площу

double getSquare() { return length*length; }

// обчислює периметр

double Perimeter() { return 4*length; }

}

Бачимо, що обидва класи мають спільні властивості та, по суті, однаковий конструктор. З’єднаємо їх ієрархічним зв'язком (зв’язком типу "батько-нащадок").

class Segment {

double length;

Segment() { length=0; }

Segment (double x) { length=x; }

}

class Square extends Segment {

Square() { length=0; }

Square (double x) { length=x; }

double getSquare() {

return length*length;

}

double Perimeter() { return 4*length; }

}

Службове слово extends вказує на суперклас (батьківський клас), у нашому випадку – на клас Segment. Успадкування

означає можливість використання властивостей та методів суперкласу класами-нащадками (підкласами) без повторного опису в тілі нащадків. Зверніть увагу: в класі Square використовується атрибут length, який

клас Square успадкував від батьківськогокласу Segment.

Аналогічно класу Square можна описати клас куба, враховуючи, що для нього поняття площі перетворюється на площу поверхні,крім того, для нього можна обчислити ще й об’єм (видовий метод).

Існує стандартизований спосіб графічного зображення ієрархічного зв’язкуміж класами (рис. справа).

Наведемо лістинг всієї програми, яка демонструє об’єктно-орієнтований підхід. Додамо лише метод перегляду довжини ребра.

Лістинг

class Segment {

double length;

Segment() { length=0; }

Segment (double x) { length=x; }

// видає довжину ребра

double getLength() { return length; }

}

class Square extends Segment {

// super() викликає конструктор батьківського класу

Square() { super(); }

// викликає конструктор батьківського

// класу з параметром х

Square (double x) { super(x); }

double getSquare() { return length*length; }

// периметр квадрата

double getPerimeter() { return 4*length; }

}

class Cube extends Square {

Cube() { super(); }

Cube (double x) { super(x); }

// перевизначення батьківського методу

double getSquare() { return 6*length*length; }

// об’єм куба

double getVolume() { return length*length*length; }

}

class pr3_10 {

public static void main(String [ ] args) {

Segment seg = new Segment(5);

Square sqr1 = new Square();

Square sqr2 = new Square(3);

Cube cb = new Cube(4);

System.out.println("Довжина відрізка: "+seg.getLength());

System.out.println("Сторона першого квадрата: "+sqr1.getLength());

System.out.println("Сторона другого квадрата: "+sqr2.getLength());

System.out.println("Ребро куба: "+cb.getLength());

System.out.println("Площа першого квадрата: "+sqr1.getSquare());

System.out.println("Периметр другого квадрата: "+sqr2.getPerimeter());

System.out.println("Площа поверхні куба: "+cb.getSquare());

System.out.println("Об’єм куба: "+cb.getVolume());

}

}

Зверніть увагу:

1. Стандартний метод super( ) у конструкторі нащадка викликає відповідний конструктор батьківського класу. У більшості випадків це спрощує написання конструктора.

2. Всі три нащадки використовують батьківський метод getLength( ) як власний.

3. Метод getSquare( ) по-різному працює для Square i Cube.

 Даний приклад демонструє другу форму поліморфізму –до визначення (overriding): методи різних класів ієрархії мають однакове ім’я та сигнатуру (список параметрів),але означають (і виконують) різне.

Так, у нашому випадку поняття площі для квадрату і кубу має різний зміст і обчислюється по-різному.

Результат роботи програми:

Довжина відрізка: 5.0

Сторона першого квадрата: 0.0

Сторона другого квадрата: 3.0

Ребро куба: 4.0

Площа першого квадрата: 0.0

Периметр другого квадрата: 12.0

Площа поверхні куба: 96.0

Об’єм куба: 64.0

Ієрархія класів може відображати не лише відношення "родове-видове". Клас-нащадок може бути розвитком сутності, її ускладненням, з набутими новими властивостями.

 

 

 

Додати коментар

Захисний код
Оновити

   

Поділіться з друзями

 
   

Сайт для перевірки своїх знань з програмування на сайті:http://www.quizful.net/test


 Розробка сайтів, інтернет-магазинів під ключ. Створення програмного забезпечення для обліку в магазинах,

гуртовнях, ведення власного бізнесу та інших. Написання дипломних та курсових робіт з програмування, баз даних.

 

Звертайтесь за адресою email:kuzbyt@ukr.net

 

 

© (C) Sambir, I.Kuzbyt