Как да направите кода си по-четлив с абстракция

Докато се учите как да програмирате, често се срещат хора, които използват термин, наречен абстракция. Започвате да се питате: какво е абстракция и защо е важно?

В тази статия ще ви обясня концепцията за абстракция и как да я използвам и ще дам няколко примера в Python.

Първи неща: Какво е абстракция?

Според моите основи на учител по програмиране:

„Абстракцията е опростена спецификация на обект“

Това означава, че абстракцията е представяне на изчислителен обект. Това е начин да се скрие конкретната му информация и да се даде само най-подходящата информация на програмиста.

Абстракцията също е ситуативна: всяка от тях отговаря на дадена нужда, така че можете да свържете добрата абстракция с конкретното използване на тази същност.

Нека да разгледаме бинарното дърво за търсене (Ако не знаете какво представляват, вижте статията ми за тях). Можем да определим възел като обект със следните свойства:

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

Тук бихме казали, че възел има два указателя към други възли и стойност int. Но колко полезно е това за някой в ​​сравнение с функция insert(node, value)и той просто би го вмъкнал правилно? По този начин просто ще трябва да го извикате и това беше направено. Просто.

Ето как абстракцията е полезна. Всички библиотеки, които използвате във вашите програми, го използват, така че да стане наистина лесно да използвате библиотека.

Добре, но колко добра е абстракцията на данни?

Абстрахирането на данни ни позволява да трансформираме сложна структура от данни в такава, която е лесна и лесна за използване. Ефектът от това е, че програма с високо ниво на сложност на кода може да се трансформира в такава, която изглежда близка до английската (нека я наречем код на високо ниво ).

Типът данни се състои от 2 неща: свойства и методи, които могат да бъдат публични или частни. Публичните са единственият начин да се използват данните. Те трябва да обхващат всички функционалности, които искате данните да могат да правят.

Какво се случва тогава, ако използвате абстрактния си код? Всъщност няма значение дали вашите вътрешни свойства се променят, докато методите продължават да получават едни и същи аргументи и правят същото като преди. Ако нещо не е наред, трябва да го промените само веднъж.

Нека да изберем пример и да работим с него: Вектори

Ще приемем, че векторите са:

  • Обекти с 2 стойности, x и y
  • x и y са и двете неотрицателни числа

По този начин Векторите са нещо като (2, 5), (0, 19) и т.н.

Добър начин за създаване на абстракции е използването на обекти. Те осигуряват скриване на информация и анонимност на представителството. Това позволява на потребителя да запази абстракцията.

Нека започнем с дефиниране на нашия клас (няма да определям проверка на типа, за да поддържам кода по-чист, но трябва да го направите):

Така че дефинирахме множество методи и сега имаме много неща, които можем да направим:

За 2D вектор това може да изглежда просто. Ако започнете да прилагате това в по-големи и по-сложни програми, ще забележите, че те са много полезни.

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

Ако изпълним едни и същи команди, изходът ще остане същият. Това се дължи на абстракцията, която използвахме, дори ако кодът се промени изцяло. Ето защо е много важно да се използва абстракция. Това позволява гъвкавост във вашия код и независимост от кода на други хора.

Нека сега използваме друг пример, този път с 2 класа: City и Citizen.

И получаваме следното:

### 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!