Скажу честно, я до сих пор использую палочные фигуры в 99% случаев, когда рисую людей.
Это не потому, что я особенно плохо рисую (я посещал пару уроков рисования), но для большинства диаграмм или фигур, в которых мне нужно изобразить человека, просто не стоит тратить усилия на создание фотореалистичного человека. Пока зрители понимают, что это человек, этого обычно достаточно.
2 ноги, 2 руки, туловище и голова, и этого обычно достаточно, чтобы донести до зрителя идею «человека». Я могу добавить дополнительные детали, чтобы указать пол или что-то еще, но только если это действительно необходимо.
Конечно, я мог бы побеспокоиться о прическе, о том, как выглядит лицо, о надеждах, мечтах и т.д., но нам не нужны эти вещи, чтобы визуально понять, что объект — это человек. Нам просто нужны эти несколько линий и круг, расположенные определенным образом.
Теперь я знаю, что это должен быть технический пост об объектно-ориентированном программировании, а не блог об искусстве, но на самом деле это прекрасный пример нашей следующей основной концепции в ООП: Абстракция!
Дьявол в деталях
Словарь определяет абстракцию как:
абстракция
[ ab-strak-shuhn ]
noun
акт рассмотрения чего-либо как общего качества или характеристики, в отрыве от конкретных реалий, конкретных объектов или реальных примеров.
*заметьте, что это второе определение на сайте dictioary.com, но оно самое полезное.
Другими словами, мы игнорируем все детали, составляющие личность, и фокусируемся только на общих свойствах и поведении.
Это уже должно звучать знакомо, если вы читали первые два поста этой серии, потому что именно так мы определяем, что включить в наши классы!
Но абстракция идет еще глубже. Или лучше сказать «глубже»?
Видите ли, поскольку мы имеем дело с кодом, мы, вероятно, не собираемся иметь дело с объектами визуально. Поэтому даже детали того, как выглядит объект, скорее всего, не нужны.
Единственные детали. и, следовательно, единственные свойства и поведения, о которых нам нужно беспокоиться, это те, которые мы действительно будем использовать!
Например, представим, что мы собираемся использовать в программе объекты person. Эти объекты person, вероятно, будут представлять пользователей, поэтому давайте абстрагируемся от человека/пользователя, который может быть использован в программе.
Мы, вероятно, не будем смотреть на человека, поэтому мы можем опустить все, что связано с внешним видом человека (количество ног, размер, цвет волос и т.д.).
Если только это не программа консультирования или что-то в этом роде, мы можем опустить все, что связано с внутренним состоянием человека.
На самом деле, быстрее будет просто подумать о том, какие детали нам действительно нужны, которые будут общими для всех наших объектов «человек/пользователь».
Одно свойство, которое есть у людей, — это имя. И оно может быть полезно для нашей программы, чтобы мы могли различать людей.
class Person
def initialize(name)
@name = name
end
end
Кроме того, все люди в нашей программе захотят что-то сделать в нашей программе, поэтому им понадобится деталь поведения.
class Person
def initialize(name)
@name = name
end
def do_something
# does something in the program
end
end
И знаете что, я думаю, это все.
Как и в случае с фигурками, мы можем добавить еще что-нибудь, если решим, что нам это нужно, но для нашего приложения человек может быть просто «вещью с именем, которая что-то делает».
Вот это абстракция!
Заключение
Когда дело доходит до кодирования, меньше — значит больше. Абстрагируясь от всех бесполезных деталей реального мира, мы можем моделировать только то, что действительно полезно.