Язык программирования
Объектно-ориентированное программирование
Класс – пользовательский тип, описывающий устройство объекта.
Принципы ООП (Алан Кэй):
Механизмы ООП (принципы):
Классы в Python
Пример класса
Объекты
Private & Public свойства
Getters & Setters
Конструктор
Конструктор
Строковое представление
Наследование
Наследование
Наследование
Наследование
Полиморфизм
Полиморфизм
Duck Typing
Дополнительно
Материалы по теме ООП
217.44K
Category: programmingprogramming

Объектно – ориентированное программирование (ООП). Лекция 8

1. Язык программирования

Лекция № 8. Объектно – ориентированное
программирование
(ООП)
Евгений Сергеевич Чухланцев

2. Объектно-ориентированное программирование

ООП
-парадигма программирования,
основными концепциями
которой являются понятия
«класс» и «объект».

3. Класс – пользовательский тип, описывающий устройство объекта.

ООП
Класс
– пользовательский тип,
описывающий устройство объекта.
Объект
класса.
– «душа», сущность

4. Принципы ООП (Алан Кэй):

все данные представляются объектами
программа - набор взаимодействующих
объектов, посылающих друг другу
сообщения
каждый объект имеет собственную часть
памяти
каждый объект имеет свой тип (класс)
объекты одного типа могут принимать
одни и те же сообщения

5. Механизмы ООП (принципы):

Абстракция - придание объекту характеристик, которые
отличают его от всех других объектов, четко определяя его
концептуальные границы.
Инкапсуляция - можно скрыть ненужные внутренние
подробности работы объекта от окружающего мира
(алгоритмы работы с данными хранятся вместе с
данными).
Наследование - можно создавать специализированные
классы на основе базовых (позволяет избегать написания
повторного кода).
Полиморфизм - в разных объектах одна и та же операция
может выполнять различные функции.
Композиция - объект может быть составным и включать в
себя другие объекты.

6. Классы в Python

1.
2.
3.
class
<name>
def <method> (self [, <arguments>]):
<Function codes>

7. Пример класса

1.
class Car(object):
2.
color = ‘red’ # свойство класса (атрибут)
3.
def out(self): # метод класса
4.
print (self.color + ‘!’)
5.
obj = Car()
6.
print (obj.color) # red
7.
obj.out() # red!

8. Объекты

Все базовые типы в Python (число, строка,
функция, модуль) - объекты.
1.
2.
3.
import math
s = ‘Hello, world!’
s.replace('world', 'people')#Hello, people!
4.
5.
6.
7.
x = math.sqrt(10.0)
print (x.as_integer_ratio())
#(7120816245988179L, 2251799813685248L)

9. Private & Public свойства

Private & Public свойства
1.
2.
3.
class Car(object):
color = “red”
__color = “green”
4.
5.
6.
7.
obj = Car()
obj.color = “yellow” # True
obj.__color = “white” # Error
Все свойства должны быть Private.

10. Getters & Setters

Getters & Setters
Если вам надо иметь доступ к свойству, определите
для него getter (accessor) и/или setter (mutator).
1.
2.
3.
4.
5.
6.
7.
class Car(object):
__speed = 0
def get_speed(self):
return self.__speed
def set_speed(self, speed):
assert isinstance(speed, int)
self.__speed = min(speed, 200)
8.
9.
10.
11.
c = Car()
c.set_speed(60)
print (c.get_speed()) # 60

11. Конструктор

- метод, при создании объекта
автоматически создающий ему
атрибуты ( __init__ ).
1.
2.
class Car(object):
def __init__(self,w,n=0):
3.
self.what = w
4.
self.numb = n
5.
6.
c1 = Car("Lexus", 15)
7.
c2 = Car("Niva")
8.
9.
print (c1.what,c1.numb) # Lexus 15
10.
print (c2.what,c2.numb) # Niva 0

12. Конструктор

Параметры без значений по умолчанию
указываются первыми, а параметры со
значениями по умолчанию — после.
class Car(object):
def __init__(self,n=0,w): # ERROR
. . .

13. Строковое представление

Метод __str__ :
объекты печатают сами себя
1.
class Car(object):
2.
__speed = 200
3.
...
4.
def __str__(self):
5.
return ‘Car with speed’ + str(self.__speed)
6.
c = Car()
7.
print (c) # Car speed 200

14. Наследование

- механизм ООП, позволяющий описать
новый класс на основе родительского, т.ч.
свойства и функциональность родительского
класса заимствуются новым классом.
Принцип: отношение «IS-A» («есть»)
Пример: «Лимузин есть машина».
Если же имеется: «Машина содержит
двигатель», то это класс машина
содержит свойство двигатель, а не наследуется
от него.

15. Наследование

1.
2.
3.
4.
class DerName (BaseClassName):
<statement-1>
. . .
<statement-N>

16. Наследование

Функция issubclass(X, Y) :
является ли класс X подклассом класса Y
1.
2.
class A(object): pass
class B(A): pass
3.
4.
5.
6.
7.
8.
issubclass(A, object) #True
issubclass(B, A) #True
issubclass(B, object) #True
issubclass(A, str) #False
issubclass (A, A) #True

17. Наследование

1.
2.
3.
4.
class A(object): pass
class B(A): pass
print B.__mro__
#(<class '__main__.B'>,
<class '__main__.A'>,
<type 'object'>)
Атрибут __mro__ – для «новых» классов:
method resolution order
(порядок разрешения методов )

18. Полиморфизм

- взаимозаменяемость объектов с
одинаковым интерфейсом
1.
2.
3.
4.
5.
6.
7.
a = (1, 2, 3)
b = [ ' a ' , ' b ' , ' c ' ]
c = {1 : ' hello ' , 2 : ' world ' }
ls = [a, b, c]
for x in ls:
print x[1],
# 2 b hello

19. Полиморфизм

- возможность использования одного и того же
имени операции (метода) к объектам разных
классов.
1.
2.
3.
4.
5.
6.
7.
class T1:
n=10
def total(self,N):
self.total = int(self.n) + int(N)
class T2:
def total(self,s):
self.total = len(str(s))
8.
9.
10.
11.
12.
13.
t1 = T1()
t2 = T2()
t1.total(45)
t2.total(45)
print t1.total, t2.total # 55 2

20. Duck Typing

«If it looks like a duck and quacks like
a duck, it must be a duck.»
1.
2.
3.
def f(x):
return x.get_value()
# можно передавать объект любого типа, лишь
бы у него был метод get_value()

21. Дополнительно

1.
2.
class Car(object): pass
c = Car()
3.
4.
print (c) # <__main__.Car object at 0x041D6BD0>
5.
6.
7.
8.
print (Car) # <class '__main__.Car'>
print (type(c)) # <class '__main__.Car'>
print (c.__class__) # <class '__main__.Car'>
9.
10.
11.
12.
print (type(Car)) # <type 'type'>
print (type(type(c))) # <type 'type'>
print (Car.__class__) # <type 'type'>
13.
14.
print (Car.__bases__) # (<type 'object'>,)
15.
16.
17.
print (type(type(Car))) # <type 'type'>
print (type(Car).__bases__) # (<type 'object'>,)

22. Материалы по теме ООП

http://younglinux.info/oopython/oop.php
http://www.ibm.com/developerworks/ru/library/lpython_part_6/index.html
http://en.wikibooks.org/wiki/Python_Programming/Objectoriented_programming
http://www.cafepy.com/article/python_types_and_objectshttp:/
/www.cafepy.com/article/python_attributes_and_methods/
http://docs.python.org/tutorial/classes.html
English     Русский Rules