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

Содержание

Слайд 2

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

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

Объектно-ориентированное

программирование
Слайд 3

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

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

Объект – «душа», сущность класса.

ООП

Слайд 4

Принципы ООП (Алан Кэй): все данные представляются объектами программа -

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

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

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

Механизмы ООП (принципы): Наследование - можно создавать специализированные классы на

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

Наследование - можно создавать специализированные классы на основе базовых

(позволяет избегать написания повторного кода).

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

Композиция - объект может быть составным и включать в себя другие объекты.

Абстракция - придание объекту характеристик, которые отличают его от всех других объектов, четко определяя его концептуальные границы.

Полиморфизм - в разных объектах одна и та же операция может выполнять различные функции.

Слайд 6

class def (self [, ]): Классы в Python

class
def (self [, ]):

Классы в Python

Слайд 7

Пример класса class Car(object): color = ‘red’ # свойство класса

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

class Car(object):
color = ‘red’ # свойство класса (атрибут)
def

out(self): # метод класса
print (self.color + ‘!’)
obj = Car()
print (obj.color) # red
obj.out() # red!
Слайд 8

Объекты Все базовые типы в Python (число, строка, функция, модуль)

Объекты

Все базовые типы в Python (число, строка, функция, модуль) - объекты.

import

math
s = ‘Hello, world!’
s.replace('world', 'people')#Hello, people!
x = math.sqrt(10.0)
print (x.as_integer_ratio())
#(7120816245988179L, 2251799813685248L)
Слайд 9

class Car(object): color = “red” __color = “green” obj =

class Car(object):
color = “red”
__color = “green”
obj = Car()
obj.color = “yellow”

# True
obj.__color = “white” # Error

Private & Public свойства

Все свойства должны быть Private.

Слайд 10

class Car(object): __speed = 0 def get_speed(self): return self.__speed def

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)
c = Car()
c.set_speed(60)
print (c.get_speed()) # 60

Getters & Setters

Если вам надо иметь доступ к свойству, определите для него getter (accessor) и/или setter (mutator).

Слайд 11

- метод, при создании объекта автоматически создающий ему атрибуты (

- метод, при создании объекта автоматически создающий ему атрибуты ( __init__

).

Конструктор

class Car(object):
def __init__(self,w,n=0):
self.what = w
self.numb = n
c1 = Car("Lexus", 15)
c2 = Car("Niva")
print (c1.what,c1.numb) # Lexus 15
print (c2.what,c2.numb) # Niva 0

Слайд 12

Параметры без значений по умолчанию указываются первыми, а параметры со

Параметры без значений по умолчанию указываются первыми, а параметры со значениями

по умолчанию — после. 

Конструктор

class Car(object):
def __init__(self,n=0,w): # ERROR
. . .

Слайд 13

class Car(object): __speed = 200 ... def __str__(self): return ‘Car

class Car(object):
__speed = 200
...
def __str__(self):
return ‘Car

with speed’ + str(self.__speed)
c = Car()
print (c) # Car speed 200

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

Метод __str__ :
объекты печатают сами себя

Слайд 14

- механизм ООП, позволяющий описать новый класс на основе родительского,

- механизм ООП, позволяющий описать новый класс на основе родительского, т.ч. свойства и функциональность

родительского класса заимствуются новым классом.

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

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

Слайд 15

class DerName (BaseClassName): . . . Наследование

class DerName (BaseClassName):

. . .

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

Слайд 16

Функция issubclass(X, Y) : является ли класс X подклассом класса

Функция issubclass(X, Y) :
является ли класс X подклассом класса Y

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

class A(object): pass
class B(A):

pass
issubclass(A, object) #True
issubclass(B, A) #True
issubclass(B, object) #True
issubclass(A, str) #False
issubclass (A, A) #True
Слайд 17

class A(object): pass class B(A): pass print B.__mro__ #( ,

class A(object): pass
class B(A): pass
print B.__mro__
#(,


,
)

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

Атрибут __mro__ – для «новых» классов:
method resolution order
(порядок разрешения методов )

Слайд 18

- взаимозаменяемость объектов с одинаковым интерфейсом Полиморфизм a = (1,

- взаимозаменяемость объектов с одинаковым интерфейсом

Полиморфизм

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

- возможность использования одного и того же имени операции (метода)

- возможность использования одного и того же имени операции (метода) к

объектам разных классов.

Полиморфизм

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))
t1 = T1()
t2 = T2()
t1.total(45)
t2.total(45)
print t1.total, t2.total # 55 2

Слайд 20

«If it looks like a duck and quacks like a

«If it looks like a duck and quacks like a duck,

it must be a duck.»

Duck Typing


def f(x):
return x.get_value()
# можно передавать объект любого типа, лишь
бы у него был метод get_value()

Слайд 21

class Car(object): pass c = Car() print (c) # print

class Car(object): pass
c = Car()
print (c) # <__main__.Car object

at 0x041D6BD0>
print (Car) #
print (type(c)) #
print (c.__class__) #
print (type(Car)) #
print (type(type(c))) #
print (Car.__class__) #
print (Car.__bases__) # (,)
print (type(type(Car))) #
print (type(Car).__bases__) # (,)

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

Имя файла: Объектно-–-ориентированное-программирование-(ООП).-Лекция-8.pptx
Количество просмотров: 65
Количество скачиваний: 0