Лекция#5:Численные алгоритмы.Матричные 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лекция#5:Численные алгоритмы.Матричные

Поиск

Критика ООП

 

Объектно-ориентированный подход сегодня считается"самым передовым".Однако не следует слепо верить в его всемогущество.Отдача(в виде скорости разработки)от объектного проектирования чувствуется только в больших проектах и в проектах,которые родственны объектному подходу:построение графического интерфейса,моделирование систем и т.п.

 

Также спорна большая гибкость объектных программ к изменениям.Она зависит от того,вносится ли новый метод(для серии объектов)или новый тип объекта.При процедурном подходе при появлении нового метода пишется отдельная процедура,в которой в каждой ветке алгоритма обрабатывается свой тип данных(то есть такое изменение требует редактирования одного места в коде).При ООП изменять придется каждый класс,внося в него новый метод(то есть изменения в нескольких местах).Зато ООП выигрывает при


 


внесении нового типа данных:ведь изменения происходят только в одном месте,где описываются все методы для данного типа.При процедурном подходе приходится изменять несколько процедур.Сказанное иллюстрируется ниже.Пусть имеются классы A,B,C и методы a,b,c:

 

# ООП

 

class A:

def a(): ...

 

def b(): ...

 

def c(): ...

 

class B:

 

def a(): ...

def b(): ...

 

def c(): ...

 

class C:

 

def a(): ...

 

def b(): ...

 

def c(): ...

 

# процедурный подход

 

def a(x):

 

if type(x) is A: ...

if type(x) is B: ...

 

if type(x) is C: ...

 

def b(x):

 

if type(x) is A: ...

if type(x) is B: ...

 

if type(x) is C: ...

 

def c(x):

 

if type(x) is A: ...

if type(x) is B: ...

 

if type(x) is C: ...

 

При внесении нового типа объекта изменения в ОО-программе затрагивают только один модуль,а в процедурной-все процедуры:

 

# ООП

 

class D:

 

def a(): ...

def b(): ...

 

def c(): ...

 

# процедурный подход

 

def a(x):

 

if type(x) is A: ...

if type(x) is B: ...

 

if type(x) is C: ...

if type(x) is D: ...

 

def b(x):

 

if type(x) is A: ...

 

if type(x) is B: ...

if type(x) is C: ...

 

if type(x) is D: ...

 

def c(x):

 

if type(x) is A: ...

 

if type(x) is B: ...


 


if type(x) is C: ...

 

if type(x) is D: ...

 

И наоборот,теперь нужно добавить новый метод обработки.При процедурном подходе просто пишется новая процедура,а вот для объектного приходится изменять все классы:

 

# процедурный подход

 

def d(x):

 

if type(x) is A: ...

 

if type(x) is B: ...

if type(x) is C: ...

 

# ООП

 

class A:

 

def a(): ...

def b(): ...

def c(): ...

 

def d(): ...

 

class B:

 

def a(): ...

def b(): ...

 

def c(): ...

 

def d(): ...

 

class C:

 

def a(): ...

def b(): ...

 

def c(): ...

def d(): ...

 

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

 

Заключение

 

Даже достаточно неформальное введение в ООП потребовало определения большого количества терминов.В лекции была сделана попытка с помощью примеров передать не столько букву,сколько дух терминологии ООП.Были рассмотрены все базовые понятия:объект,тип,класс и виды отношений между объектами(IS-A, HAS-A, USE -A).Слушатели получили представление о том,что такое инкапсуляция и полиморфизм в стиле ООП,а также наследование-продление времени жизни объекта за рамками исполняющейся программы,известное как устойчивость объекта(object persistence).Были указаны недостатки ООП,но при этом весь предыдущий материал объективно свидетельствовал о достоинствах этого подхода.

 

Возможно,что именно эта лекция приведет слушателей к пониманию ООП,пригодному и удобному для практической работы.

 

Ссылки

 

Дэвид Мертцhttp://www-106.ibm.com/developerworks/linux/library/l-pymeta.html


 




Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 80; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.176 (0.007 с.)