Обектно-ориентиран подход към програмирането: концепция, приложение и развитие

Първите езици за програмиране са императивни езици или машинни инструкции (кодове). Те се състоеха от двоичен код, който се различаваше в зависимост от машината. Наборът от възможни команди за такива „езици“ от ниско ниво е малък, тъй като всяка машинна инструкция изпълнява определено действие (добавяне, копиране на машинната дума в регистъра, преминаване към следващия раздел на кода). Разбира се, за удобство, програмистите са разработили набор от писмо-аналози за тези машинни екипи и този начин на общуване с машината "желязо" се нарича асемблер на езика.

Асемблер

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


Най-известната реализация на асемблера:
  • Borland Turbo Assembler (TASM).
  • Microsoft Macrom Assembler (MASM).
  • Асемблер на Watcom (WASM).
  • A86.
  • Езици на високо ниво

    С развитието на процесорите е имало нужда от по-гъвкави и широко използвани инструменти за взаимодействие с компютъра. С течение на времето машинните кодове станаха много дълги и неудобниРазбира се, беше решено да се управляват екипи, интуитивни хора, да се чете и пише кодът. Първият език на високо ниво за компютър, използвайки такъв подход, стана Fortran. Командите на машината са станали четливи: тук за първи път се появяват OPEN, CLOSE, PRINT, IF операторът и IF THEN-ELSE.
    Освен това следва да се отбележи, че Fortran след оттеглянето на перфокарти в историческия боклук започна да подкрепя структурното програмиране.

    Структурно програмиране

    През 60-те - началото на 70-те години започва разработването на следващата парадигма на програмиране - структурно програмиране, още една стъпка към обектно-ориентиран подход към дизайна. След работата на Edgar Dyckstra "За опасностите на оператора goto" в момента разработчиците стигат до разбирането, че работата на която и да е програма може да бъде описана само с три управляващи структури:
  • разклоняване;
  • цикъл.
  • Оттогава операторът goto е признат за излишен. Това е оператор, който ви позволява да отидете на всеки блок от програмата. И за начинаещи понякога изглежда, че няма нищо по-просто от използването на оператора goto в определени области на кода, за да не се измислят следващите клонове и вериги. Но в действителност, използването на този оператор рано или късно води до факта, че програмата се превръща в "спагети код". Такъв код не може да бъде поддържан, безболезнено модифициран, и още по-лошо, трудно е да се видят други разработчици, които ще заменят автора на кода. Това е особено опасно в развитието на бизнеса, където те са проектираниголеми бази данни на хиляди редове от код. Течливостта е винаги и е трудно да се справим с лошия код, особено за програмиста, който идва в компанията.

    Езикът на програмирането C

    Разцветът на структурното програмиране е неразривно свързан с езика за програмиране C. Този език е написан на езика на асемблер Денис Ричи и Кен Томпсън и е станал изходният език за развитието на операционната система UNIX. Тя се превърна в основа за много съвременни операционни системи като GNU /Linux, FreeBSD, MacOS, Posix и много други.
    Поради факта, че дизайнът на езика C е близо до машинните команди, той се разпространява главно в различни приложни програми за множество устройства, от видеокарти и операционни системи до ракети и суперкомпютри. Синтаксисът завинаги стана основа за много съвременни езици за програмиране (C ++, C #, Java, Objective-C).

    Обектно-ориентирано програмиране (ООП)

    Програмите продължиха да стават все по-сложни и вместо императивната парадигма дойде разбиране за необходимостта от обектно-ориентиран подход към информационните технологии. Вместо обичайната работа с компютър, с помощта на конзолата се появяват графични приложения. Компютърът сега не е високоспециализиран уред за научни и военни изчисления, а инструмент, чиито възможности се простират от автоматизация до комуникация с приятели. Основната структурна единица при разработването на обектно-ориентиран подход е обявеният клас. Класът е абстрактен тип данни, създаден от програмиста. Това е схема, или договор, който описва полетата и методите на обектите, които ще бъдатсъздаден според типовете на този клас. Например, човек, автомобил, отдел е абстракция, така че може да бъде описан като клас. Иван Иванович, бял "Шкода" с оперативен отдел nn123 - това са конкретни представители на тези абстракции, тоест, обектно-ориентираният подход към програмирането е обектите на тези класове. Задачата на разработчика е да опише абстрактните и конкретни обекти на реалния свят на езика на ООП. Описанието на класа се прилага в описанието на полетата и методите.

    Полета

    Полетата са променливи, т.е. стойности, които характеризират работата на този клас. Например, ако напишем машинния клас за компютърна игра, можем да определим за него следните полета:

    клас Car
    {
    низ brand = "Hunday" Solaris ";
    низ цвят = "жълт";
    двойна скорост = 0;
    /* останалата част от програмния код * /
    }

    Инкапсулиране

    Полетата могат да променят значението си в хода на програмата, ако е предоставена от програмиста. Ако авторът не желае полетата да са достъпни извън клас, а друга програма (потребител) може да промени стойностите си, той "капсулира данните, т.е. ги прави недостъпни, използвайки ключовите думи private, защитени. Yaksch Например, можете да направите всички класове от класа публични:

    клас Car
    {

    обществен низ,
    публична двойна скорост,
    *
    останалата част от програмния код
    *
    }

    В този случай достъп до тези полета няма да бъдат ограничени. В интерфейса можете случайно или умишлено да промените важни данни в полетатав бъдеще неправилно да повлияе на работата на цялата програма:

    & lt; script async = "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">

    & lt; script & gt; (adsbygoogle = window.adsbygoogle || []). push ({});
    клас Главен
    {
    публичен статичен невалиден Main ()
    {
    Car car = new Car ();
    car.colour = "Червен";
    /* останалата част от програмния код * /
    }
    }

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

    Методи

    Методите са функции, които ви позволяват да работите с полета на класа или с други данни. Подобно на всяка функция в процедурните езици за програмиране, те вземат данни и могат или да върнат резултата от изчисленията или да не се върнат (например да покажат нещо на конзолата). Например:

    клас Car
    {
    обществен низ brand = "Hunday Solaris"
    публичен низ color = "yellow"
    публична двойна скорост = 0;

    /* по-долу описва метода "Drive", който се предава на булевата променлива whatIsTrafficLight (със стойности само false - червена светлина, или true - зелена светлина, т.е. можете да отидете) * /
    public void
    {
    if (whatIsTrafficLight == true)
    {
    скорост = скорост + 40;
    }
    друго
    {
    скорост = 0;
    }
    }

    }

    Накрая, използвайки метода Drive, променяме скоростта на машинния клас.


    & lt; text /javascript "& gt;
    може да blockSettings = {blockId:" RA-70350-45 ", renderTo:" yandex_rtb_R-A-70350-45 ", async: ! 0};
    if (document.cookie.indexOf ("abmatch =") & gt; = 0) blockSettings.statId = 70350;
    ! функция (a, b, c, d, e) {a [c] = a [c] || [], a [c] .push (функция () {Ya.Context.AdvManager.render (blockSettings)} , e = b.getElementsByTagName ("скрипт") , d = b.createElement ("скрипт"), d.type = "text /javascript", d.src = "//an.yandex.ru/system /context.js ", d.async =! 0e.parentNode.insertBefore (d, e)} (това, този документ," yandexContextAsyncCallbacks ");

    Полиморфизъм

    Вторият "стълб" на развитието на обектно-ориентирания подход е полиморфизмът. Бьорн Страуструп, създател на C ++ езика, формулира дефиницията на полиморфизма, както следва: "Един интерфейс - много реализации." Накратко, полиморфизмът е способността да се създаде абстрактен клас, който описва цялостния дизайн на структурата, и от него вече са създадени производни класове, които въвеждат липсващи механизми. Например, когато създавате герой в компютърна игра, от гледна точка на обектно-ориентиран подход, логично е първо да приложите абстрактната класа на личността, а от нея вече създавате специфични класове: Арчър, Лечител, Воин и т.н.

    Или пък пример с кола. Ако работим с една машина, с няколко полета и методи, не е необходимо да променяме ръчно няколко стойности в кода. Но колко могат да бъдат такива машини? Или, например, потребителите в социалната мрежа? Всеки има име, фамилия, семейно положение, фотоалбум, огромен брой ценности, връзки към други страници, други потребители и т.н. И ако разработчиците на социални мрежи решат да направят редизайн, а някои потребителски настройки могат да бъдат променени или премахнати, тогава ще има много работа с този подход. Решава този проблемно-ориентиран подход. Класовете се създават не за всеки конкретен обект, а за абстрактния клас и от него първоначалносъздават се наследници. Подобно на капсулирането, полиморфизмът е второто най-важно правило за ООП.

    Наследяване

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

    клас Мотоцикъл: Car
    {
    /* останалата част от програмния код * /
    }


    Сега Полетата и методите на автомобила клас-майка са достъпни за използване в мотоциклета клас-наследник. Накратко, наследяването е механизъм за повторно използване на кода и е насочен към удобно и логично компетентно разширение на програмата. Също така наследяването помага да се придържате към принципа на DRY (Не повтаряйте себе си). Според този принцип кодът не трябва да има повтарящи се сайтове, тъй като създава ненужна тежест при компилирането и изпълнението на програмата. Ако в кода има повтарящи се области, тогава той трябва да бъде оптимизиран - да го повторите в отделни методи и да го направите при необходимост; прилагат наследство към логически подобни обекти, които имат идентични полета и методи.

    Обобщение

    Понятието за обектно-ориентиран подход към програмирането съществува от повече от четиридесет години и сега е най-търсеният начин за развитие (с изключение наспецифични области, например разработване на софтуер за контролери, където доминира език С). Най-важните парадигми на ООП са:
  • Наследяване.
  • Полиморфизъм.
  • Инкапсулиране.
  • След като внимателно проучи тези мощни инструменти, съвременният разработчик ще може да пише бърз, поддържан, визуално приятен и модифициран код, който ще поддържа бизнес нуждите в продължение на много години, ще радва геймърите, ще разрешава социални проблеми на хората или ще осигурява комуникация във всички краища на света.

    Свързани публикации