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

# ООП

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, позволяющие иметь большую гибкость в комбинации процедурного и объектно–ориентированного подходов.

<p>Заключение</p>

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

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

<p>Ссылки</p>

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

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

В данной лекции рассматривается пакет Numeric для осуществления численных расчетов и выполнения матричных вычислений, приводится обзор других пакетов для научных вычислений.

Numeric Python — это несколько модулей для вычислений с многомерными массивами, необходимых для многих численных приложений. Модуль Numeric вносит в Python возможности таких пакетов и систем как MatLab, Octave (аналог MatLab), APL, J, S+, IDL. Пользователи найдут Numeric достаточно простым и удобным. Стоит заметить, что некоторые синтаксические возможности Python (связанные с использованием срезов) были специально разработаны для Numeric.

Numeric Python имеет средства для:

• матричных вычислений LinearAlgebra;

• быстрого преобразования Фурье FFT;

• работы с недостающими экспериментальными данными MA;

• статистического моделирования RNG;

• эмуляции базовых функций программы MatLab.

<p>Модуль Numeric</p>

Модуль Numeric определяет полноценный тип–массив и содержит большое число функций для операций с массивами. Массив — это набор однородных элементов, доступных по индексам. Массивы модуля Numeric могут быть многомерными, то есть иметь более одной размерности.

<p>Создание массива</p>

Для создания массива можно использовать функцию array() с указанием содержимого массива (в виде вложенных списков) и типа. Функция array() делает копию, если ее аргумент — массив. Функция asarray() работает аналогично, но не создает нового массива, когда ее аргумент уже является массивом:

>>> from Numeric import *

>>> print array([[1, 2], [3, 4], [5, 6]])

[[1 2]

 [3 4]

 [5 6]]

>>> print array([[1, 2, 3], [4, 5, 6]], Float)

[[ 1. 2. 3.]

Перейти на страницу:

Похожие книги