Як зробити свій код більш читабельним за допомогою абстракції

Поки ви вивчаєте, як програмувати, звичайно бачити, як люди використовують термін, який називається абстракцією. Ви починаєте запитувати себе: що таке абстракція і чому це важливо?

У цій статті я розтлумачу вам концепцію абстракції та способи її використання, і я наведу кілька прикладів на Python.

Перш за все: що таке абстракція?

Відповідно до моїх основ викладача програмування:

"Абстракція - це спрощена специфікація сутності"

Це означає, що абстракція є поданням обчислювальної сутності. Це спосіб приховати свою конкретну інформацію і лише надати програмісту найбільш актуальну інформацію.

Абстракція також є ситуативною: кожна з них відповідає потребі, тому ви можете пов’язати хорошу абстракцію з конкретним використанням цієї сутності.

Давайте поглянемо на бінарне дерево пошуку (якщо ви не знаєте, що це таке, перегляньте мою статтю про них). Ми можемо визначити вузол як сутність із такими властивостями:

A Node has: Node * left Node * right int val

Тут ми сказали б, що Вузол має два вказівники на інші вузли та значення int. Але наскільки це корисно для когось у порівнянні з функцією, insert(node, value)і він просто правильно її вставить? Таким чином, вам просто потрібно буде зателефонувати, і це було зроблено. Простий.

Ось чим абстракція корисна. Усі бібліотеки, якими ви користуєтесь у своїх програмах, використовують його, так що користуватися бібліотекою стає по-справжньому простим.

Гаразд, але наскільки хороша абстракція даних?

Абстракція даних дозволяє нам перетворити складну структуру даних у просту та просту у використанні. Наслідком цього є те, що програму з високим рівнем складності коду можна перетворити на програму, яка виглядає близькою до англійської (назвемо її кодом високого рівня ).

Тип даних складається з двох речей: властивостей і методів, які можуть бути загальнодоступними або приватними. Публічні - це єдиний спосіб використовувати дані. Вони повинні охоплювати всі функції, які ви хочете, щоб дані могли робити.

Що станеться тоді, якщо ви використовуєте свій абстрактний код? Насправді не має значення, чи змінюються ваші внутрішні властивості, поки методи все ще отримують однакові аргументи і виконують те саме, що і раніше. Якщо щось не так, вам потрібно змінити це лише один раз.

Давайте підберемо приклад і попрацюємо з ним: Вектори

Будемо вважати, що Вектори:

  • Об'єкти з 2 значеннями, x та y
  • x і y обидва невід’ємні числа

Таким чином, Вектори - це щось на зразок (2, 5), (0, 19) тощо.

Хорошим способом створення абстракцій є використання об’єктів. Вони забезпечують приховування інформації та анонімність подання. Це дозволяє користувачеві зберегти абстракцію.

Почнемо з визначення нашого класу (я не буду визначати перевірку типу, щоб зберегти код чистішим, але ви повинні це зробити):

Отже, ми визначили кілька методів, і зараз у нас є багато речей, які ми можемо зробити:

Для 2D-вектора це може здатися простим. Якщо ви почнете впроваджувати це у більші та складніші програми, ви помітите, що вони дуже корисні.

Давайте тепер зробимо іншу реалізацію вектора класу (змінимо його внутрішній стан) на щось із тими самими методами, але з іншим кодом:

Якщо ми запускаємо одні і ті ж команди, результат все одно буде однаковим. Це пов’язано з абстракцією, яку ми використовували, навіть якщо код повністю змінювався. Ось чому дуже важливо використовувати абстракцію. Це забезпечує гнучкість у коді та незалежність коду інших людей.

Давайте тепер використаємо інший приклад, цього разу з 2 класами: Місто та Громадянин.

І ми отримуємо наступне:

### OUTPUT ###City population is 1000, random: Citizen is a female 20 years oldCity population is 1000, random: Citizen is a male 74 years old

Але уявіть тепер, що ми хочемо змінити, як всередині працює клас Citizen. Якби ми не використовували абстракцію, нам довелося б змінити весь код! Це багато роботи!

Тепер, якщо код запущений знову, ми знаємо, що він працює, хоча результати різні. Як бачите, ми змінили цілий клас, але все працює!

Підведенню

Спочатку абстракція може здаватися, що вона не потрібна. Чим нижчий рівень мови, якою ви користуєтесь, тим важливіше використовувати абстракцію. Це дозволяє уникнути наявності складного коду і насправді робить все простим. У таких мовах, як C, це дійсно корисно. Якщо ви сумніваєтесь, перевірте цей проект, який я зробив, де я реалізував абстракцію, і було справді легко зрозуміти, що відбувається.

Якщо у вас є питання або щось, про що ви хочете поговорити або обговорити, залиште коментар нижче!

Не забудьте стежити за мною в Instagram та Twitter!