После последней серии статей о нотации Big-O я решил сделать еще одну серию, посвященную основам программирования.
На этот раз мы рассмотрим 4 ключевые концепции объектно-ориентированного программирования. Также известные как 4 «столпа», эти концепции составляют основу ООП. Эти концепции должны помочь вам думать о кодировании интуитивно понятным способом.
Что такое объекты?
Это само собой разумеется, но объектно-ориентированное программирование (ООП) будет сосредоточено вокруг идеи объектов. Поэтому в первую очередь необходимо понять, что такое объект в программировании.
Мысленный эксперимент
Для того чтобы понять идею объекта, давайте проведем мысленный эксперимент.
Подумайте об объекте. Это может быть все, что вы можете себе представить. Теперь подумайте, как бы вы описали этот предмет кому-то другому, не используя его название.
…
В зависимости от вашего объекта, это, вероятно, будет довольно просто. По сути, это просто шарады на легком режиме.
(Он маленький, у меня есть хвост, он говорит «кря», он может плавать, у него есть счет и т.д.)…
Каждый из этих дескрипторов можно рассматривать либо как свойство, либо как поведение. Свойства — это вещи, которые описывают, чем является объект, а поведение описывает, что он делает. Когда у вас будет достаточно этих дескрипторов, вы сможете легко представить себе объект (или что-то близкое к нему).
Другими словами, объект можно представить как группу свойств и моделей поведения.
Мы еще вернемся к этим свойствам и моделям поведения, но пока большим откровением является то, что их нужно рассматривать как группу!
Подумайте, если я просто скажу, что цвет: коричневый или умеет летать, то по отдельности они мало что значат. Но когда вы группируете свойства и модели поведения вместе, вы получаете полную картину:
size = "small"
tail = true
quack = (do something)
swim = (do something)
mouth_type = "bill"
color = "brown"
fly = (do something)
Когда все написано таким образом, легко понять, как мы можем использовать это представление объектов, чтобы начать моделировать их с помощью кода.
Сохраняя элегантность
Давайте составим небольшую программу об утках. Начнем с двух уток:
duck_1 = "Cleopatra"
duck_2 = "Mr. Whiskers"
Это здорово, но, допустим, мы хотим определить цвет уток:
duck_1_name = "Cleopatra"
duck_1_color = "brown"
duck_2_name = "Mr. Whiskers"
duck_2_color = "mallard"
Мы также должны сообщить возраст и пол уток, а также то, «свободны» они или нет:
duck_1_name = "Cleopatra"
duck_1_color = "brown"
duck_1_age = 2
duck_1_gender = "Male"
duck_1_available = true
duck_2_name = "Mr. Whiskers"
duck_2_color = "mallard"
duck_2_age = 2
duck_2_gender = "Prefer not to say"
duck_2_available = true
Теперь представьте, что на наше приложение для знакомств подписались еще 10 уток (я не упоминал, что мы создавали?). Нам придется выписать эти 5 переменных для каждой из них.
Мало того, несмотря на то, что значения разные, у всех уток есть переменная для имени, цвета, возраста, пола и наличия. Поскольку я знаю, что мне нужны эти переменные для каждой утки, и я хорошо представляю, какими будут возможные значения, было бы здорово, если бы я мог просто сказать программе создать «утку».
Классы позволяют нам сделать именно это!
class Duck
attr_accessor :name
attr_accessor :color
attr_accessor :age
attr_accessor :gender
attr_accessor :available
end
Duck.new(name: 'Cleopatra', color: 'brown', age: 2, gender: 'male', available: true)
#etc...
Можно представить себе класс как шаблон или прототип для отдельных объектов.
Ориентация на объект
С помощью объектов и классов мы можем представлять реальные (или воображаемые) объекты в коде. Создавая, расширяя и соединяя эти объекты и классы объектов друг с другом, мы можем строить невероятно сложные программы и моделировать любое количество ситуаций.