# Објектно-ориентирано програмирање

**Објектно-ориентираното програмирање** е програмска парадигма која што користи “објекти“ – структури на податоци составени од datafields и методи – и нивната интеракција за дизајнирање на апликации и компјутерски програми. Техниките на програмирање можат да вклучуваат и одлики како што се криење на информации, податочна абстракција, encapsulation, модуларност, полиморфизам и наследување. ООП не беше често користен во развојот на апликации со до 1990те. Многу од модерните програмски јазици сега поддржуваат ООП.

## Краток преглед

Почетоците на ООП може да се пронајдат во 1960те. Како што хардверот и софтверот стануваше се посложен, квалитетот често беше компромитиран. Истражувачите бараа начини да го задржат квалитетот на софтверот и да го развиваат ООП и да посветат внимание на честите проблеми и посебно силно нагласување на повеќекратните единици од програмската логика. Методологијата се фокусира повеќе на податоци отколку на процеси, со програми составени од самостојни модули (објекти) секој си содржи сите информации потребни за да манипулира со сопствената податочна структура. Тоа е спротивно со постоечкото модуларно програмирање што беше доминатно многу години и се фокусираше на функциите од модулите повеќе отколку на податоците но исто така обезбедуваше повеќекратна употреба на кодот и повеќекратна употреба на самостојните единици од програмската логика, овозможуваше соработка преку употреба на поврзани модули (потпрограми). Овој конвенционален пристап, којшто сѐ уште постои, насочен е да ги третира податоците и однесувањата посебно.

На објектно-ориентирана програма може да се гледан како на колекција од кооперативни објекти, за разлика од вообичаениот модел, во којшто на програмата се гледан како на листа од задачи (потпрограми) што пред да се извршат. Во ООП секој објект е способен да прими порака, обработи податок и да прати порака на друг објект и на него може да се гледа како на независна “машина“ со посебна улога или одговорност. Операторите на тие објекти се тесно поврзани со објектот. На пример, структурите на податоци имаат тенденција ка ги носат нивните оератори со нив (или барем да ги “наследат“ нив од слични објекти или класи).

Програмскиот јазик Simula беше привиот јазик што воведе ООП концепти (објекти, класи, поткласи, виртуелни методи, coroutines и посебна симулација на настан) како дел од Algol. Simula исто така користеше автоматско собирање на ѓубре коешто претходно беше измислено за фнкционалниот програмски јазик Lisp. Simula се сористеше за физичко моделирање, како на пример модели за изучување и подобрување на движењето на бродовите и нивниот товар низ товарните портите. Smalltalk беше првиот јазик којшто беше наречен “објектно-ориентиран“.

## Историја

Концептот од објекти и instances го имаше своето прво големо пробивање со PDP-1 системот на MIT што најверојатно беше првиот пример на capability based architecture. Меѓу првите примери беше и Sketchpad создадено од Ivan Sutherland во 1963 година. Како и да било, ова е апликација а не програмска парадигма. Објектите како програмски entities биле воведени во 1960те во Simula 67, програмиски јазик дизајниран за правење симулации, создаден од Ole-Johan Dahl и Kristen Nygaard од Норвешкиот компјутерски центар во Осло. (Тие работеа на симулации на бродови и биле збунети од combinatorial експлозии и тоа како различни особини од различни бродови можат да делуваат еден на друг. Идејата била да се групираат различни типови на бродови во различни класи од објекти, секоја класа од објекти е одговорна за дефинирање на сопствените податоци и однесувања.) Таквиот пристап проста екстраполација на концепти претходно користени во аналогното програмирање. На аналогните компјутери, мапирањето од real-world phenomena/objects во analog phenomena/objects (и обратно), беше (и сѐ уште е) наречено “симулација“. Simula не само што ја воведе идејата за класи туку исто така воведе и instances од класи, што веројатно е и првата употреба на овие замисли. Идеите од Simula 67 на многу од подоцнежните јазици, посебно на Smalltalk и други јазизи зведени од Lisp и Pascal.

Програмскиот јазик Smalltalk што беше развиван во Xerox PARC (од страна на Alan Kay и други личности) во 1970-ти години, го воведе терминот објектно-ориентирано програмирање

## Надворешни врски

* Programming Styles: Procedural, OOP, and AOP Архивирано на 5 октомври 2011 г.
* What is OOP? (Tutorial on OOP in PHP) Архивирано на 20 февруари 2010 г.
* Discussion about the flaws of OOD