SlideShare a Scribd company logo
1 of 36
Вступ в об'єктно-Вступ в об'єктно-
орієнтованеорієнтоване
програмуванняпрограмування
Підходи до програмування
- процедурне
- ООП
X, Y – координати центра кола;
Draw
R – радіус кола;
Color – колір кола.
R
X,Y
R1 – радіус кола;
X1, Y1 – координати
центра кола;
Color1 – колір кола.
Draw1
R2 – радіус кола;
X2, Y2 –координати
центра кола;
Color2 – колір кола.
Draw2
R_n – радіус кола;
X_n, Y_n – координати
центра кола;
Color_n – колір кола.
Draw_n
11 спосібспосіб
R – радіус кола;
X, Y – координати центру кола;
Color – колір.
Draw
Draw1: R=10; x=5; y=10; color=3;
Draw2: R=45; x=15; y=3; color=2;
Draw_n: R=5; x=25; y=13; color=2;
. . . . . . . . .
22 спосібспосіб
ChangeColor
Move
R – радіус кола;
X, Y – координати центра кола;
Color – колір кола.
Draw Move ChangeColor
Екземпляри класу
Властивості
об'єкта
методи
Батьківський клас
Кожен об'єкт має свій певний тип (клас), що
об'єднає в собі наступні елементи:
Властивості – певні параметри і
характеристики об'єкту
Методи – дії, що можна виконувати над даним
об'єктом, чи які може виконувати він сам
Події – повідомлення що виникають при зміні
стану об'єкта
структурована змінна, що містить в собі всю
інформацію про деякий фізичний предмет або
сутність, що реалізується в програмі
структурована змінна, що містить в собі всю
інформацію про деякий фізичний предмет або
сутність, що реалізується в програмі
ВластивостіВластивості МетодиМетоди
ОБ'ЄКТ
Параметри об'єкта Процидури та функції, що
виконуються об'єктом
ІнкапсуляціяІнкапсуляція
Інкапсуляція – це властивість об'єкта мати
спеціальний інтерфейс (певний метод), через
який і здійснюється взаємодія зовнішнього
середовища з внутрішніми методами класу.
При чому зовнішнє середовище може і не
підозрювати про структуру і логіку внутрішніх
методів.
RoundRound
ВластивостіВластивості
R
X
Y
Color
МетодиМетоди
Draw
Move
ChangeColor
EyesEyes
ВластивостіВластивості
R
X
Y
Color
МетодиМетоди
Draw
Move
ChangeColor
НаслідуванняНаслідування
Parent –
батьківський
клас
Child – дочірній
клас
Малювати, Переміщати, Змінювати світло
RoundRound RectRect
RR - Радіус - Довжина- Радіус - Довжина
X,YX,Y - Координати Центра – Вершини- Координати Центра – Вершини
Наслідування – це можливість породжувати
один клас від іншого, при чому всі методи і
властивості батьківського класу передаються
дочірньому, дочірній клас в свою чергу може
набувати нових методів і властивостей, яких не
було в батьківському і також передавати їх в
похідні від себе класи.
Rect
Round
Draw
Малює
прямокутник
Малює коло
КласиКласи МетодиМетоди ДіїДії
ПоліморфізмПоліморфізм
Поліморфізм – це можливість дочірнього
класу змінювати реалізацію тих чи інших дій
батьківського класу.
Синтаксис
<?php
class Circle
{
public $radius = 15
private $color = “red”;
public function Draw($radius, $color) {
}
}
//best practice
$rectangle = new Rectangle();
$rectangle->Draw(55, “blue”);
?>
Області видимості методів і
властивостей класів.
• public – доступний без обмежень
• protected – тільки в середині класу, в
якому вони оголошені і похідних від нього
класах
• private – тільки в середині класу, в якому
вони оголошені
<?php
// оголошуємо основний клас
class Figure {
private $privateName = 'Private Name';
protected $protectedName =
'Protected Name';
public $publicName = 'Public Name';
private function PrivateFunction() {
echo 'PrivateFunction()';
}
protected function ProtectedFunction()
{
echo 'ProtectedFunction()';
}
public function PublicFunction() {
echo 'PublicFunction()';
}
public function GetPrivate() {
echo $this->privateName;
}
public function GetProtected() {
echo $this->protectedName;
}
// оголошуємо похідний клас від SomeClass
class Circle extends Figure {
public function GetPrivateFromParent() {
echo $this->privateName;
}
}
Статичні властивості і методи
класу
• Є ще також статичні (static) методи і
властивості. Їхньою особливістю є те, що
вони не належать певному об'єктові, вони
єдині для цілого класу, і можуть
викликатися без створення об'єкту. Зміна
статичної властивості в одному з об'єктів
класу призводить до його зміни для всіх
об'єктів цього класу.
Приклад:
<?php
// оголошуємо основний клас
class SomeClass{
static $staticVar = 'Static Variable';
static function StaticFunction() {
echo 'StaticFunction()';
}
}
echo SomeClass::StaticFunction(); // Виводить StaticFunction()
echo SomeClass::$staticVar; // Виводить Static Variable
?>
Константи класу
<?php
class Rectangle {
const DefaultColor = "RED";
}
// Виводить "SOME CONSTANT"
echo Rectangle::DefaultColor;
?>
Конструктори и деструктори.
• Конструктор (__construct()) і деструктор
(__destruct()) це методи що викликаються
автоматично при створенні і знищенні
об'єкту відповідно:
<?php
class SomeClass{
function __construct() {
echo 'Create object';
}
function __destruct() {
echo 'Destroy object';
}
}
$someObj = new SomeClass; // Виводиться Create object
unset($someObj); // Виводиться Destroy object
?>
Абстрактні методи і класи.
Абстрактні (abstract) методи і класи тільки
оголошуються, клас який містить абстрактні
методи повинен оголоситися як
абстрактний. На основі абстрактного класу
можна тільки створювати інші класи, а вже
від них об'єкти. Абстрактний клас може
містити і звичайні (не абстрактні) елементи.
Приклад:
<?php
abstract class SomeAbstractClass {
// оголошення абстрактної функції
abstract public function abstractFunction();
// оголошення неабстрактної функції
public function GeneralFunction() {
}
}
class SomeClass extends SomeAbstractClass {
// перевантаження абстрактного методу
public function abstractFunction() {
echo 'abstractFunction()';
}
}
$someObj = new SomeAbstractClass; // Помилка створення об'єкта
$someObj1 = new SomeClass;
$someObj1->abstrFunc(); // Виводить 'abstractFunction()'
?>
Інтерфейси.
Інтерфейс – це фактично абстрактний клас,
який містить тільки абстрактні методи і не
містить ніяких властивостей.
Оголошуються інтерфейси з використанням
ключового слова interface, а всі функції
оголошуються стандартно, з використанням
ключового слова function.
Приклад:
<?php
// оголошення інтерфейсів
interface InterfaceOne {
function SomeFunctionOne();
}
interface InterfaceTwo {
function SomeFunctionTwo();
}
// оголошення класу на основі інтерфейсів
class SomeClass implements InterfaceOne, InterfaceTwo {
public function SomeFunctionOne() {
echo 'SomeFunctionOne()';
}
public function SomeFunctionTwo() {
echo 'SomeFunctionTwo()';
}
}
$object = new SomeClass;
$object->SomeFunctionOne(); // Виводить 'SomeFunctionOne()'
$object->SomeFunctionTwo(); // Виводить 'SomeFunctionTwo()'
?>
Обробка винятків (помилок).
Найцікавішим нововведенням в PHP 5 є
методи для обробки винятків. Для цього
використовуються конструкції
try/catch/throw.
<?php
try {
// відкриваємо файл для читання
$fp = @fopen("somefile.txt", "r");
// якщо файл відсутній, створюємо виключення
if (!$someFile)
throw new Exception(" Помилка відкриття файлу!");
fclose($someFile);
} catch (Exception $exception) {
// метод $exception->getLine() повертає номер рядка даного скрипта,
в якому виникла помилка
echo "Помилка в стрічці ", $exception->getLine();
echo $exception->getMessage(); // Выводит "Помилка відкриття файлу!"
}
?>
Перевантаження доступу до
властивостей об'єкту.
Методи доступу __get() і __set() дозволяють
динамічно визначати властивості об'єктів.
__get() в якості параметра отримує ім'я
властивості, а __set() окрім імені ще і нове
значення властивості, яке відповідно і
присвоює.
<?php
class SomeClass {
private $classPropertys;
function __set($name, $value) {
echo "__set: присвоювання властивості $name = $value";
$this->classPropertys[$name]=$value;
}
function __get($name) {
echo "__get: читання властивості $name: ";
echo $this->classPropertys[$name];
}
}
$obj = new SomeClass;
$obj->name = 'New Value'; // Виводить "__set: присвоювання властивості name=New Value"
$value = $obj->name; // Виводить "__get: читання властивості name: New Value"
?>
Перевантаження викликів
методів класу.
Якщо метод __call() описаний в певному класі,
тоді він автоматично переловлює виклики
до неіснуючих методів цього класу. В якості
параметрів він отримує ім'я і параметри
методу що викликається.
<?php
class SomeClass {
function __call($name, $params) {
echo "Помилка: викликано неіснуючий метод $name з
параметром[ами]: ";
foreach($params as $val) {
echo $val.' | ';
}
}
}
$obj = new SomeClass;
$obj->WrongMethodOne(1, 2, 'param'); // Виводить: 'Помилка: викликано неіснуючий
метод WrongMethodOne з параметром[ами]: 1 | 2 | param |'
$obj->WrongMethodTwo(123); // Виводить: 'Помилка: викликано неіснуючий метод
WrongMethodOne з параметром[ами]: 123 |'
?>
Уточнення типу (type-hint)
PHP 5 надає можливість використовувати контроль
типів. На даний момент функції мають можливість
змушувати параметри бути або об'єктами (шляхом
зазначення імені класу в прототипі функції), або
інтерфейсами, або масивами (починаючи з PHP 5.1),
або колбек з типом callable (починаючи з PHP 5.4).
Якщо клас або інтерфейс вказано для контролю типу,
то всі його нащадки або реалізації також допустимі.
<?php
class MyClass
{
public function test(OtherClass $otherclass) {
echo $otherclass->var;
}
public function test_array(array $input_array) {
print_r($input_array);
}
public function test_interface(Traversable $iterator) {
echo get_class($iterator);
}
public function test_callable(callable $callback, $data) {
call_user_func($callback, $data);
}
}
// Другой тестовый класс
class OtherClass {
public $var = 'Hello World';
}
?>
Шаблони проектування

More Related Content

Similar to Oop - TTm

01 Incapsulation
01 Incapsulation01 Incapsulation
01 Incapsulationolegapster
 
Net framework і c# module 9
Net framework і c# module 9Net framework і c# module 9
Net framework і c# module 9Andrii Hladkyi
 
Advanced C#. Part 2
Advanced C#. Part 2Advanced C#. Part 2
Advanced C#. Part 2eleksdev
 
Phpunit модульне тестування
Phpunit модульне тестуванняPhpunit модульне тестування
Phpunit модульне тестуванняVladimir Maslechkin
 
Рівняння х2=а. Основна тотожність квадратного кореня.
Рівняння х2=а. Основна тотожність квадратного кореня.Рівняння х2=а. Основна тотожність квадратного кореня.
Рівняння х2=а. Основна тотожність квадратного кореня.sveta7940
 
Net Framework and C# Module 3 4. Inheritance, Abstractions
Net Framework and C# Module 3 4. Inheritance, AbstractionsNet Framework and C# Module 3 4. Inheritance, Abstractions
Net Framework and C# Module 3 4. Inheritance, AbstractionsAndrii Hladkyi
 
11324 урок 9 клас
11324 урок 9 клас11324 урок 9 клас
11324 урок 9 класjasperwtf
 
лаб. роб. №2 обєкти та сервіси що ними надаються
лаб. роб. №2   обєкти та сервіси що ними надаютьсялаб. роб. №2   обєкти та сервіси що ними надаються
лаб. роб. №2 обєкти та сервіси що ними надаютьсяcit-cit
 
презент урока
презент урокапрезент урока
презент урокаgtdonnu
 
Net framework і c# module 3
Net framework і c# module 3Net framework і c# module 3
Net framework і c# module 3Andrii Hladkyi
 

Similar to Oop - TTm (15)

01 Incapsulation
01 Incapsulation01 Incapsulation
01 Incapsulation
 
Net framework і c# module 9
Net framework і c# module 9Net framework і c# module 9
Net framework і c# module 9
 
Advanced C#. Part 2
Advanced C#. Part 2Advanced C#. Part 2
Advanced C#. Part 2
 
Phpunit
PhpunitPhpunit
Phpunit
 
Phpunit модульне тестування
Phpunit модульне тестуванняPhpunit модульне тестування
Phpunit модульне тестування
 
урок функціїї
урок функціїїурок функціїї
урок функціїї
 
функція
функціяфункція
функція
 
Рівняння х2=а. Основна тотожність квадратного кореня.
Рівняння х2=а. Основна тотожність квадратного кореня.Рівняння х2=а. Основна тотожність квадратного кореня.
Рівняння х2=а. Основна тотожність квадратного кореня.
 
Net Framework and C# Module 3 4. Inheritance, Abstractions
Net Framework and C# Module 3 4. Inheritance, AbstractionsNet Framework and C# Module 3 4. Inheritance, Abstractions
Net Framework and C# Module 3 4. Inheritance, Abstractions
 
11324 урок 9 клас
11324 урок 9 клас11324 урок 9 клас
11324 урок 9 клас
 
JavaScript. Lectures. part 1. basis
JavaScript. Lectures. part 1. basisJavaScript. Lectures. part 1. basis
JavaScript. Lectures. part 1. basis
 
лаб. роб. №2 обєкти та сервіси що ними надаються
лаб. роб. №2   обєкти та сервіси що ними надаютьсялаб. роб. №2   обєкти та сервіси що ними надаються
лаб. роб. №2 обєкти та сервіси що ними надаються
 
тема
тематема
тема
 
презент урока
презент урокапрезент урока
презент урока
 
Net framework і c# module 3
Net framework і c# module 3Net framework і c# module 3
Net framework і c# module 3
 

Oop - TTm

  • 1. Вступ в об'єктно-Вступ в об'єктно- орієнтованеорієнтоване програмуванняпрограмування
  • 2. Підходи до програмування - процедурне - ООП
  • 3. X, Y – координати центра кола; Draw R – радіус кола; Color – колір кола. R X,Y
  • 4. R1 – радіус кола; X1, Y1 – координати центра кола; Color1 – колір кола. Draw1 R2 – радіус кола; X2, Y2 –координати центра кола; Color2 – колір кола. Draw2 R_n – радіус кола; X_n, Y_n – координати центра кола; Color_n – колір кола. Draw_n 11 спосібспосіб
  • 5. R – радіус кола; X, Y – координати центру кола; Color – колір. Draw Draw1: R=10; x=5; y=10; color=3; Draw2: R=45; x=15; y=3; color=2; Draw_n: R=5; x=25; y=13; color=2; . . . . . . . . . 22 спосібспосіб
  • 7. R – радіус кола; X, Y – координати центра кола; Color – колір кола. Draw Move ChangeColor Екземпляри класу Властивості об'єкта методи Батьківський клас
  • 8. Кожен об'єкт має свій певний тип (клас), що об'єднає в собі наступні елементи: Властивості – певні параметри і характеристики об'єкту Методи – дії, що можна виконувати над даним об'єктом, чи які може виконувати він сам Події – повідомлення що виникають при зміні стану об'єкта
  • 9. структурована змінна, що містить в собі всю інформацію про деякий фізичний предмет або сутність, що реалізується в програмі структурована змінна, що містить в собі всю інформацію про деякий фізичний предмет або сутність, що реалізується в програмі ВластивостіВластивості МетодиМетоди ОБ'ЄКТ Параметри об'єкта Процидури та функції, що виконуються об'єктом ІнкапсуляціяІнкапсуляція
  • 10. Інкапсуляція – це властивість об'єкта мати спеціальний інтерфейс (певний метод), через який і здійснюється взаємодія зовнішнього середовища з внутрішніми методами класу. При чому зовнішнє середовище може і не підозрювати про структуру і логіку внутрішніх методів.
  • 12. Малювати, Переміщати, Змінювати світло RoundRound RectRect RR - Радіус - Довжина- Радіус - Довжина X,YX,Y - Координати Центра – Вершини- Координати Центра – Вершини
  • 13. Наслідування – це можливість породжувати один клас від іншого, при чому всі методи і властивості батьківського класу передаються дочірньому, дочірній клас в свою чергу може набувати нових методів і властивостей, яких не було в батьківському і також передавати їх в похідні від себе класи.
  • 15. Поліморфізм – це можливість дочірнього класу змінювати реалізацію тих чи інших дій батьківського класу.
  • 16. Синтаксис <?php class Circle { public $radius = 15 private $color = “red”; public function Draw($radius, $color) { } } //best practice $rectangle = new Rectangle(); $rectangle->Draw(55, “blue”); ?>
  • 17. Області видимості методів і властивостей класів. • public – доступний без обмежень • protected – тільки в середині класу, в якому вони оголошені і похідних від нього класах • private – тільки в середині класу, в якому вони оголошені
  • 18. <?php // оголошуємо основний клас class Figure { private $privateName = 'Private Name'; protected $protectedName = 'Protected Name'; public $publicName = 'Public Name'; private function PrivateFunction() { echo 'PrivateFunction()'; } protected function ProtectedFunction() { echo 'ProtectedFunction()'; } public function PublicFunction() { echo 'PublicFunction()'; } public function GetPrivate() { echo $this->privateName; } public function GetProtected() { echo $this->protectedName; } // оголошуємо похідний клас від SomeClass class Circle extends Figure { public function GetPrivateFromParent() { echo $this->privateName; } }
  • 19. Статичні властивості і методи класу • Є ще також статичні (static) методи і властивості. Їхньою особливістю є те, що вони не належать певному об'єктові, вони єдині для цілого класу, і можуть викликатися без створення об'єкту. Зміна статичної властивості в одному з об'єктів класу призводить до його зміни для всіх об'єктів цього класу.
  • 20. Приклад: <?php // оголошуємо основний клас class SomeClass{ static $staticVar = 'Static Variable'; static function StaticFunction() { echo 'StaticFunction()'; } } echo SomeClass::StaticFunction(); // Виводить StaticFunction() echo SomeClass::$staticVar; // Виводить Static Variable ?>
  • 21. Константи класу <?php class Rectangle { const DefaultColor = "RED"; } // Виводить "SOME CONSTANT" echo Rectangle::DefaultColor; ?>
  • 22. Конструктори и деструктори. • Конструктор (__construct()) і деструктор (__destruct()) це методи що викликаються автоматично при створенні і знищенні об'єкту відповідно:
  • 23. <?php class SomeClass{ function __construct() { echo 'Create object'; } function __destruct() { echo 'Destroy object'; } } $someObj = new SomeClass; // Виводиться Create object unset($someObj); // Виводиться Destroy object ?>
  • 24. Абстрактні методи і класи. Абстрактні (abstract) методи і класи тільки оголошуються, клас який містить абстрактні методи повинен оголоситися як абстрактний. На основі абстрактного класу можна тільки створювати інші класи, а вже від них об'єкти. Абстрактний клас може містити і звичайні (не абстрактні) елементи.
  • 25. Приклад: <?php abstract class SomeAbstractClass { // оголошення абстрактної функції abstract public function abstractFunction(); // оголошення неабстрактної функції public function GeneralFunction() { } } class SomeClass extends SomeAbstractClass { // перевантаження абстрактного методу public function abstractFunction() { echo 'abstractFunction()'; } } $someObj = new SomeAbstractClass; // Помилка створення об'єкта $someObj1 = new SomeClass; $someObj1->abstrFunc(); // Виводить 'abstractFunction()' ?>
  • 26. Інтерфейси. Інтерфейс – це фактично абстрактний клас, який містить тільки абстрактні методи і не містить ніяких властивостей. Оголошуються інтерфейси з використанням ключового слова interface, а всі функції оголошуються стандартно, з використанням ключового слова function.
  • 27. Приклад: <?php // оголошення інтерфейсів interface InterfaceOne { function SomeFunctionOne(); } interface InterfaceTwo { function SomeFunctionTwo(); } // оголошення класу на основі інтерфейсів class SomeClass implements InterfaceOne, InterfaceTwo { public function SomeFunctionOne() { echo 'SomeFunctionOne()'; } public function SomeFunctionTwo() { echo 'SomeFunctionTwo()'; } } $object = new SomeClass; $object->SomeFunctionOne(); // Виводить 'SomeFunctionOne()' $object->SomeFunctionTwo(); // Виводить 'SomeFunctionTwo()' ?>
  • 28. Обробка винятків (помилок). Найцікавішим нововведенням в PHP 5 є методи для обробки винятків. Для цього використовуються конструкції try/catch/throw.
  • 29. <?php try { // відкриваємо файл для читання $fp = @fopen("somefile.txt", "r"); // якщо файл відсутній, створюємо виключення if (!$someFile) throw new Exception(" Помилка відкриття файлу!"); fclose($someFile); } catch (Exception $exception) { // метод $exception->getLine() повертає номер рядка даного скрипта, в якому виникла помилка echo "Помилка в стрічці ", $exception->getLine(); echo $exception->getMessage(); // Выводит "Помилка відкриття файлу!" } ?>
  • 30. Перевантаження доступу до властивостей об'єкту. Методи доступу __get() і __set() дозволяють динамічно визначати властивості об'єктів. __get() в якості параметра отримує ім'я властивості, а __set() окрім імені ще і нове значення властивості, яке відповідно і присвоює.
  • 31. <?php class SomeClass { private $classPropertys; function __set($name, $value) { echo "__set: присвоювання властивості $name = $value"; $this->classPropertys[$name]=$value; } function __get($name) { echo "__get: читання властивості $name: "; echo $this->classPropertys[$name]; } } $obj = new SomeClass; $obj->name = 'New Value'; // Виводить "__set: присвоювання властивості name=New Value" $value = $obj->name; // Виводить "__get: читання властивості name: New Value" ?>
  • 32. Перевантаження викликів методів класу. Якщо метод __call() описаний в певному класі, тоді він автоматично переловлює виклики до неіснуючих методів цього класу. В якості параметрів він отримує ім'я і параметри методу що викликається.
  • 33. <?php class SomeClass { function __call($name, $params) { echo "Помилка: викликано неіснуючий метод $name з параметром[ами]: "; foreach($params as $val) { echo $val.' | '; } } } $obj = new SomeClass; $obj->WrongMethodOne(1, 2, 'param'); // Виводить: 'Помилка: викликано неіснуючий метод WrongMethodOne з параметром[ами]: 1 | 2 | param |' $obj->WrongMethodTwo(123); // Виводить: 'Помилка: викликано неіснуючий метод WrongMethodOne з параметром[ами]: 123 |' ?>
  • 34. Уточнення типу (type-hint) PHP 5 надає можливість використовувати контроль типів. На даний момент функції мають можливість змушувати параметри бути або об'єктами (шляхом зазначення імені класу в прототипі функції), або інтерфейсами, або масивами (починаючи з PHP 5.1), або колбек з типом callable (починаючи з PHP 5.4). Якщо клас або інтерфейс вказано для контролю типу, то всі його нащадки або реалізації також допустимі.
  • 35. <?php class MyClass { public function test(OtherClass $otherclass) { echo $otherclass->var; } public function test_array(array $input_array) { print_r($input_array); } public function test_interface(Traversable $iterator) { echo get_class($iterator); } public function test_callable(callable $callback, $data) { call_user_func($callback, $data); } } // Другой тестовый класс class OtherClass { public $var = 'Hello World'; } ?>