Используя объектно-ориентированное программирование, у вас будут объекты, имеющие связанные функции, которые (должны) быть единственным способом изменить его свойства (внутренние переменные).
Общепринято иметь функции под названием trim_string(string)
, а с классом string
вы могли бы сделать string.trim()
. Разница заметна главным образом при выполнении больших сложных модулей, где вам нужно сделать все возможное, чтобы минимизировать связь между отдельными компонентами.
Существуют и другие концепции, которые охватывают ООП, как наследование, но реальная важная вещь, чтобы знать, что ООП о том, чтобы вы думаете о объекты, которые имеют операции и передачи сообщений (методы/глаголы), вместо того, чтобы думать в перспективе операций (функции/глаголы) и основные элементы (переменных)
The importance из объектно-ориентированной парадигмы не столько в механизме языка, как в процессе мышления и дизайна.
Также взгляните на this question.
Там нет ничего неотъемлемо неправильно о структурном программировании, это просто, что некоторые проблемы карта лучше объектно-ориентированного проектирования.
Например, вы могли бы на языке SP:
#Pseudocode!!!
function talk(dog):
if dog is aDog:
print "bark!"
raise "IS NOT A SUPPORTED ANIMAL!!!"
>>var dog as aDog
>>talk(dog)
"bark!"
>>var cat as aCat
>>talk(cat)
EXCEPTION: IS NOT A SUPPORTED ANIMAL!!!
# Lets add the cat
function talk(animal):
if animal is aDog:
print "bark!"
if animal is aCat:
print "miau!"
raise "IS NOT A SUPPORTED ANIMAL!!!"
Хотя на объектно-ориентированном программировании вы бы:
class Animal:
def __init__(self, name="skippy"):
self.name = name
def talk(self):
raise "MUTE ANIMAL"
class Dog(Animal):
def talk(self):
print "bark!"
class Cat(Animal):
def talk(self):
print "miau!"
>>dog = new Dog()
>>dog.talk()
"bark!"
>>cat = new Cat()
>>cat.talk()
"miau!"
Вы можете видеть, что с SP, каждое животное, которое вы добавляете , вам придется добавить еще if
в talk
, добавить еще одну переменную, чтобы сохранить имя животного, коснуться потенциально каждой функции модуля, а в ООП вы можете считать свой класс независимым от остальных. Когда происходит глобальное изменение, вы меняете Animal
, когда это узкое изменение, вам просто нужно взглянуть на определение класса.
Для простого, последовательного и, возможно, отбрасывающего кода, хорошо использовать структурированное программирование.
Это очень злые исключения –
Пользователь должен быть наказан за что-то не так. Интерфейс должен * повредить пользователю. И безопасность более важна **, чем удобство использования. В идеальном мире никто не сможет ничего использовать. http://www.usalyze.com/wp-content/dilbert-200209233.gif http://www.usernomics.com/images/dilbert.gif (не нашел всех ссылок) – voyager
@voyager У меня есть никогда не видел синтаксис 'var = new Class()', по крайней мере, не в Python. Я бы использовал 'var = Class()'. Я что-то упускаю? –