Идея, что что-то может быть больше.

Google говорит нам — Abstract ; «существующий в мысли или как идея, но не имеющий физического или конкретного существования».

В коде — Аннотация; «процесс изъятия или удаления характеристик чего-либо с целью сведения его к набору существенных характеристик»

Мы часто видим это в рубине. Посмотрите этот пример:

class Person
  def name
    @name
  end

  def name=(str)
    @name = str
  end
end

Есть более простой способ:

class Person
  attr_reader :name
  attr_writer :name
end

Этот код сокращает избыточность и повышает эффективность. Но это было бы невозможно, если бы у создавшего его человека не было абстрактного мыслительного процесса.

Мое представление об абстракции — это процесс взятия чего-то и размышления о том, как это может быть больше (мысленно) и меньше (физически). давайте посмотрим на этот код:

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

#Artists 
drake = Artist.create(name: “Drake”)
maroon_5 = Artist.create(name: “Maroon 5”)
dennis_lloyd = Artist.create(name: “Dennis Lloyd”)
calvin = Artist.create(name: “Calvin Harris”)
stormzy = Artist.create(name: “Stormzy”)
#Songs
nice_for_what = Song.create(name: “Nice For What”)
girls_like_you = Song.create(name: “Girls Like You”)
nevermind = Song.create(name: “Nevermind”)
feels = Song.create(name: “Feels”)
mr_skeng = Song.create(name: “Mr Skeng”)
#Genres
hip_hop = Genre.create(name: “Hip Hop”)
pop = Genre.create(name: “Pop”)
grime = Genre.create(name: “Grime”)

Пока я не узнал о «фейкере» (привет Ники), который является жемчужиной, которая генерирует поддельные данные. Теперь, когда у меня был неограниченный запас данных, я создал несколько циклов для создания экземпляров каждого класса.

require 'faker'
for i in 1..50 do
 Artist.create(name: Faker::Music.band)
 puts “#{i}th Artist added”
end
for i in 1..50 do
 Album.create(name: Faker::Music.album)
 puts “#{i}th Album added”
end
for i in 1..6 do
 Genre.create(name: Faker::Music.genre)
 puts “#{i}th Genre added”
end

Вот и приходит… мысль… «может быть больше?» — чаще всего ответ положительный.

Окончательный вариант — в итоге я получил цикл, создающий «Жанры», и еще один цикл, создающий «Исполнителя»; внутри цикла «Исполнитель» есть еще один цикл, который создает «Альбом» для каждого исполнителя и создает необходимые ассоциации (моя любимая часть — это случайное количество альбомов, которое получает каждый исполнитель).

require 'faker'
for i in 1..6 do
 Genre.create(name: Faker::Music.genre) 
 puts “#{i}th Genre added” 
end

for i in 1..50 do
 artist = Artist.create(name: Faker::Music.band)
  puts “#{artist.id}th Artist added”
 end
  for j in 1..(rand(10) + 1) do
   album = Album.create(name: Faker::Music.album)
   puts “#{album.id}th Album added”
    album.artist_id = artist.id
    album.genre_id = Genre.all[rand(Genre.all.length — 1)].id
     album.save
 end
end

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

Архитектор из Дании спроектировал этот завод экологически чистой энергии, чтобы вы могли кататься на лыжах по крыше. Он использует форму электростанции, чтобы создать «больше», и в процессе подчеркивает ее «зеленый» аспект. Итак, электростанция, которую вы обычно никогда не увидите, теперь стала туристической достопримечательностью.

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

Моя точка? Всякий раз, когда вы работаете над проектом и закончили что-то, просто подумайте… «Может ли это быть больше?»

Рекомендую посмотреть «Абстракт» — это документальный сериал о дизайне.