Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Контейнерлік кластар.






Кө птеген есептердің шешімі ә р тү рлі формадағ ы объектілердің жиынтығ ынан жә не ө ң деулерінен тұ рады.

Басқ а типті объектілерді сақ тауғ а жә не олармен жұ мыс жасайтын объектті контейнер деп атайды. Контейнердің классикалық мысалдарына тізім, вектор, ассоциативті массивтер жатады. Кей кезде контейнер мазмұ нын тізбектелген деп атайды.

С++ тілінде контейнерлерді контейнерлік жә не параметрлік кластарды қ олдану арқ ылы жү зеге асырады.

Контейнерлік класс – кейбір объектілерді басқ арушы объектіге, яғ ни контейнерге қ осу ү шін композиция немесе толтыру механизімін қ олданатын ө ң деуді қ абылдау класы. Контейнерлік кластар бірнеше объектілік ө рістерден немесе объектіге кө рсететін ө рістерден тұ рады. Егер контейнерлік класс композиция механизімін қ олданса, онда басқ арушы объектілердің типі мен саны объектілік ө рістердің типі жә не санымен анық талғ ан. Егер толтыру механизімін қ олданса, контейнер кейбір базалардың объектілерін жә не осы кластағ ы барлық объектілерін басқ ара алады.

Кез келген контейнерлік кластың негізгі мақ саты объектілерді тізбектеп ө ң деу. Бұ л ө ң деу екі ә діспен жү зеге асырылады:

1. Контейнердің барлық элементтерін қ арау ү шін қ ұ рылғ ан арнайы процедурағ а негізделеді. Бұ л процедурағ а параметр ретінде контейнер элементтерін ө ң деу алгоритмін жү зеге асыратын функция немесе процедура аты беріледі.

2. Берілген контейнердің тү ріне сә йкес келетін анық талғ ан итератор немесе класс итераторы арқ ылы жү зеге асырылады. Итераторлардың кө мегімен программист контейнерлермен жұ мыс жасай алады. Бірнеше кілттік компонеттік функциялар программистке тізбектелген элементтердің соң ын табуғ а мү мкіндік береді.

Ә детте контейнерлік кластар вектор(vector), тізім(enumeration), динамикалық вектор(dynamic vector), стек(stack), очередь(queue), дек(deq), жиын(set), бір жә не бірнеше байланыс тізімдер(l ists) типтік структураларды жү зеге асырады.

Осы келтірілген тізімнен вектор мен тізім динамикалық емес структурулар.

Стек – элементтерді қ осуғ а жә не алуғ а болатын бір жақ шеті дә некерленген труба ретінде елестетуге болатын контейнер. Стек LIFO қ ызметін жү зеге асырады (Last in – first out, соң ғ ы келген – бірінші кетеді.)

 

Сурет 1: Стек

 

Мысал:

interface Stack {boolean empty(); //Стек бос па? void clear(); // Стекті босату.void push(int val); // Стекке сан қ осу (басына).int pop() throws Exception; // Стектің басындағ ы санды ө шіру.int top() throws Exception; // Стектің басын алу (ө шірмей).} Бос стектен элемент алуғ а болмайды.

Кезек – соң ынанбасына қ арай ө тетін тек бір бағ ытта бағ ытталғ ан екі шеті бар труба ретінде қ арастыруғ а болады. Кезек FIFO қ ызметін жү зеге асырады (First in – first out, бірінші келген – бірінші кетеді.)

 

 

Сурет 2: Кезек

 

 

Мысал:

interface Queue {boolean empty(); // Кезек бос па? void clear(); // Кезекті босату.void push(int val); // Кезекке сан қ осу (соң ына).int pop() throws Exception; // Кезектің басынан санды ө шіруint front() throws Exception; // Кезектің басын алу(ө шірмей).}

Бос кезектен стектен сияқ ты элемент алуғ а болмайды.

Дек – (double ended queue, екі жақ ты кезек) –стек пен кезектің симбиозы. Бір бірінен тә уелсіз жұ мыс жасауғ а болатын екі шеті ашық труба ретінде елестетуге болады.

 

Сурет 3: Дек

Мысал:

interface Deq {boolean empty(); // Дек бос па? void clear(); // Декті босату.void pushFront(int val); // Дектің басына сан қ осу.void pushBack(int val); // Дектің соң ына сан қ осу.int popFront() throws Exception; // Дектің бірінші элементін ө шіру.int popBack() throws Exception; // Дектің соң ғ ы элементін ө шіру.int front() throws Exception; // Дектің бірінші элементін алу (ө шірмей).int back() throws Exception; // Дектің соң ғ ы элементін алу (ө шірмей).} L2-тізімсызық ты екі байланысты тізім – жіпке ө ткізілген моншақ ретінде елестетуге болады. Тізім ү шін оның басы жә не соң ы, сондай-ақ кө рсеткіш анық талғ ан. Кө рсеткіш ә р уақ ытта тізім элементтерінің арасында болады. Тө мендегі мысалды кө рсетілгендей тізімге элементті қ осу немесе жою тек кө рсеткіштің қ асында ғ ана орындалады.
Сурет 4: L2-список
Мысал: interface L2List {boolean empty(); // Тізім бос па? void clear(); // Тізімді босату.void toFront(); // Кө рсеткішті тізімнің басына жылжыту.void toBack(); // Кө рсеткішті тізімнің соң ына жылжыту.boolean begin(); // Кө рсеткіш тізімнің басында ма? boolean end(); // Кө рсеткіш тізімнің соң ында ма? void forward() throws Exception; // Кө рсеткішті алдығ а жылжыту.void backward() throws Exception; // Кө рсеткішті артқ а жылжыту.int after() throws Exception; // Кө рсеткіштен кейін сан алу; int before() throws Exception; // Кө рсеткіштің алдында сан алу; void insertBack(int val); // Кө рсеткіштен кейін сан қ осу; void insertFront(int val); // Кө рсеткіштің алдында сан қ осу; int eraseBack() throws Exception; // Кө рсеткіштен кейінгі санды ө шіру.int eraseFront() throws Exception; // Кө рсеткіштің алдындағ і санды ө шіру.}

 

Мысал: Элемент бойынша ө ң деу процедурасымен контейнерлік класс.

Сан – Жол – Таблица иерархия кластарына жататын сұ рыпталғ ан элементтер тізімі базасында контейнер жасау керек болсын. Кластар структурасын кезең бойынша қ ұ рамыз. Иерархия кластарының негізіне Тізім – Элемент кластарын саламыз.

Бұ л екі класс басқ арылатын объектілері Элемент класынан алынғ ан контейнерлік класттарды қ ұ рады. Тізім класы Элемент класының элемент-объектілер кө рсеткіші: бірінші элементке кө рсеткіш, соң ғ ы элементке кө рсеткіш жә не ағ ымдағ ы элементке кө рсететін ү ш ө рістерден тұ рады. Элемент класы келесі жә не алдың ғ ы тізім элементтерінің адресін сақ тайтын, сол кластағ ы элемент кө рсеткіштерінен тұ ратын екі ө рістен тұ рады.

Содан соң осы класттардың базасында Сұ рыпталғ ан тізім абстрактілі контейнерлік класын қ ұ рамыз. Онда элементтерді салыстыратын ішкі шақ ырылатын ә діс Compare-мен Sort сұ рыптау ә дісі қ арастырылғ ан. Бұ л ішкі салыстыру ә дісі осы кластың базасында ә р тү рлі сұ рыптауларды қ олдануғ а болатын басқ а класттарды қ ұ руғ а мү мкіндік береді.

Бақ ылау сұ рақ тары:

1. Контейнер дегеніміз не?

2. Контейнерлік класс ұ ғ ымын қ алай тү сінесіз?

3. Контейнерлік класс тү рлері қ андай?

Ә дебиеттер:

1. Павловская Т.А. С и С++. Программирование на языке высокого уровня.

2. Р. Лафоре. Объектно-ориентированное программирование в С++.4-е издание. Питер.2004

3. Подбельский В.В., Фомин С.С. Программирование на языке Си: Учебное пособие. – М.: Финансы и статистика, 2004

4. Гради Буч. Объектно - ориентированный анализ и проектирование с примерами приложений на С++. - М.: Изд. Бином, Невский Диалект, 1998.

5. А.В. Замулин. Курс лекций: ООП (С++, Ява, C#)






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.