Идея, что что-то может быть больше.
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
Достаточно кода. Идея абстрактного дизайна может быть реализована практически во всех ситуациях, задумывались ли вы когда-нибудь, почему здание выглядит именно так.
Архитектор из Дании спроектировал этот завод экологически чистой энергии, чтобы вы могли кататься на лыжах по крыше. Он использует форму электростанции, чтобы создать «больше», и в процессе подчеркивает ее «зеленый» аспект. Итак, электростанция, которую вы обычно никогда не увидите, теперь стала туристической достопримечательностью.
Платон фотограф. Вместо того, чтобы инструктировать свою модель позировать, он разговаривает с ними, фотографируя их и фотографируя их реальные выражения, черно-белое изображение просто подчеркивает это. так много больше, с таким малым.
Моя точка? Всякий раз, когда вы работаете над проектом и закончили что-то, просто подумайте… «Может ли это быть больше?»
Рекомендую посмотреть «Абстракт» — это документальный сериал о дизайне.