Похожие презентации:
Объектно – ориентированное программирование (ООП). Лекция 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 likea 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.phphttp://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