Увод у објектно-оријентисано програмирање

Објектно-оријентисано програмирање (ООП) је парадигма програмирања која користи објекте као основу за пројектовање рачунарског софтвера. Решавање проблема парадигмом ООП је врло слично људском начину размишљања и решавању реалних проблема. Било који систем из реалног света може се посматрати као скуп објеката који међусобно комуницирају.

Објекат у ООП представља објекат из реалног света. Класа представља групу објеката који имају заједничке карактеристике и функционалности (каже се да је класа апстрактна представа скупа објеката који имају заједничке карактеристике и функционалности). У ООП уместо појма карактеристика користимо појам атрибут или својство, а уместо појма функционалност користимо појам метода. Атрибути и методе чине чланове класе, где атрибутима дефинишемо вредности, а методама групе наредби.

Објекат представља инстанцу (примерак) класе. Када инстанцирамо објекат на основу одређене класе, он се креира у оперативној меморији и тада се може користити. Класу треба схватити као скицу/нацрт на основу које ће касније бити инстанцирани објекти. Сама класа није објекат већ само скица за инстанцирање објеката. За израду класе користи се резервисана реч class иза које следи име. Именски простор представља скуп повезаних класа одређен именом. За израду именског простора користи се резервисана реч namespace иза које следи име.

Анализирајмо следећи пример:

using System;

namespace Trouglovi    // imenski prostor Trouglovi
{
    public class Pravougli    // klasa Pravougli
    {
        public double a, b, c, O, P;    // atributi

        public Pravougli (double a, double b)    // konstruktor
        {
            this.a = a;
            this.b = b;
            Hipotenuza();
            Obim();
            Povrsina();
        }

        public void Hipotenuza()    // metoda
        {
            c = Math.Sqrt(Math.Pow(a,2) + Math.Pow(b,2));
        }

        public void Obim()    //metoda
        {
            O = a + b + c;
        }

        public void Povrsina()    //metoda
        {
            P = a * b;
        }

        public void Ispis()    //metoda
        {
            Console.WriteLine("a = " + this.a.ToString());
            Console.WriteLine("b = " + this.b.ToString());
            Console.WriteLine("c = " + this.c.ToString());
            Console.WriteLine("O = " + this.O.ToString());
            Console.WriteLine("P = " + this.P.ToString());
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Pravougli T1 = new Pravougli(3.0, 4.0);    // instanciranje
            T1.Ispis();
        }
    }
}

На почетку примера, написали смо директиву за коришћење именског простора System како би наш конзолни програм имао одређене функционалности. Након тога креирали смо именски простор Trouglovi у оквиру кога се налазе класе Pravougli и Program. У оквиру класе Pravougli дефинисали смо атрибуте (променљиве реалног типа у којима би се чувале вредности страница, обима и површине троугла), креирали смо контруктор Pravougli који представља методу са параметрима које се класи достављају у тренутку креирања и након тога методе за израчунавање хипотенузе, обима и површине троугла и испис резултата. У класи Program написали смо само једну статичку методу Main у оквиру које смо инстанцирали објекат T1 класе Pravougli (троугао чија је страница a има вредност 3 и страница b има вредност 4), па након тога позвали методу Ispis() за испис резултата. Извршавањем овог програма у конзолном прозору исписаће се:

a = 3
b = 4
c = 5
O = 12
P = 12
Press any key to continue . . .

Енкапсулација је одлика ООП која омогућује контролу приступа атрибутима и методама (скривање имплементације). Реализује се коришћењем модификатора приступа. Модификатор public омогућује потпун приступ атрибутима и методама у оквиру истог или других склопова. У наредним лекцијама научићете зашто није добро користити овај модификатор свуда, као што смо то учинили у примеру изнад. Модификатор private омогућује да се атрибуту или методи може приступати само у оквиру исте класе. Модификатор protected омогућује да се атрибуту или методи може приступати у оквиру класе, као и у оквиру изведених класа. Модификатор internal омогућује да се атрибуту или методи може приступати у оквиру истог склопа. Модификатор protected internal омогућује да се атрибуту или методи може приступати у оквиру истог склопа или из наслеђене класе у другом склопу. Модификатор private protected (постоји у новијим верзијама C#) омогућује да се атрибуту или методи може приступати у оквиру изведене класе истог склопа. Више о мотификаторима приступа можете прочитати на овом линку.

Апстракција је одлика ООП која омогућује сакривања одређених детаља и приказивања само неопходних информација кориснику. Може се имплементирати апстрактним класама и методама. Апстрактна класа је ограничена класа која се не може користити за креирање објеката (да би јој се приступило, мора постојати изведена класа). Апстрактна метода може се користити само у апстрактној класи и нема тело – тело апстрактне методе дефинише се у изведеној класи. Више о апстракцији можете прочитати на овом линку.

Наслеђивање је одлика ООП која омогућује да се из једне класе може извести нова класа. Изведена класа наслеђује све чланове основне класе, а може да уведе своје специфичне атрибуте и методе. На овај начин креира се хијерархијска наследна линија односно класна хијерархија.

Полиморфизам је одлика ООП која омогућује да методе у основној класи могу другачије бити имплементиране у изведеним класама.