Проектирование и реализация абстракций типов данных

Основные понятия объектно-ориентированного программирования, особенности описания функций и классов. Разработка программы для работы с универсальной очередью установленного типа, добавления и удаления ее элементов и вывода содержимого очереди на экран.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 27.08.2012
Размер файла 187,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

2

Размещено на http://www.allbest.ru/

Содержание
Введение
1 Текст программы
2 Результаты выполнения программы
3 Описание программы
Заключение
Список использованных источников

Введение

Денис Ричи разработал и первым реализовал язык программирования C на DEC PDP-11 с операционной системой UNIX. Язык является результатом разработки старого языка BCPL. Мартин Ричард разработал BCPL под влиянием созданного Кеном Томсоном языка B, который привел к разработке C в 1980 году.
В течение многих лет стандартом C де-факто была версия, поставляемая для операционной системы UNIX System V. Растущая популярность компьютеров привела к созданию множества приложений для C.

C часто называют языком среднего уровня. Это определение означает, что он объединяет элементы языков высокого уровня с функциональностью ассемблера.

Известно, какое значение приобретает сегодня объектно-ориентированное программирование, учитывая возрастающие требования к качеству, надежности и пользовательскому интерфейсу приложений. Сложность и объем программ все время растут. В свете этого объектно-ориентированные языки, и прежде всего C++, становятся едва ли не единственным средством решения встающих перед программистом задач.

Наиболее важным понятием в объектно-ориентированном программировании является понятие объекта. Объект-это логическая единица, которая содержит данные и правила (методы) обработки этих данных. В языке С++ в качестве таких правил обработки выступают функции.

Чтобы определить объект в С++ , надо сначала определить его форму с помощью ключевого слова class.

Описание класса производится следующим образом:

сlass: <имя>

{

[< спецификатор видимости>]

< член класса>

};

Спецификатор видимости определяет степень доступности членов класса и может принимать значения:

private (закрытый) - доступный только внутри методов и друзей этого класса;

protected (защищенный) - доступный только внутри методов, друзей этого класса и производных от него классов;

public (открытый) - доступный из произвольной программной среды.

Членами класса могут быть:

?Информационные поля ,которые определяются как поля структуры;

?Операции- функции члена класса, которые определяются как прототипы функций.

Очевидно, что функции члены класса должны компилироваться всегда, когда вносится какое-либо изменение в описание класса. В идеале такое изменение никак не должно отражаться на пользователях класса. К сожалению, это не так. Для размещения переменной классового типа компилятор должен знать размер объекта класса. Если размер этих объектов меняется, то файлы, в которых класс используется, нужно компилировать заново.

Этой сложности можно избежать, представив каждый объект класса как указатель на «настоящий» объект. Так как все эти указатели будут иметь одинаковый размер, а размещение «настоящих» объектов можно определить в файле, где доступна закрытая часть, то это может решить проблему. Однако решение подразумевает дополнительные ссылки по памяти при обращении к членам класса, (т.е включает по меньшей мере один вызов программ выделения и освобождения свободной памяти).

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

Подобно функциям, классы также могут быть параметризованы одним или несколькими типами. Типичным примером такой возможности могут служить классы с неизвестными заранее типами элементов, которые реализуются с помощью шаблонов классов. В качестве примера рассмотрим шаблон класса, реализующий очередь.

Файл UnQLimSz.h

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

* инициализация очереди (конструктор);

* разрушение очереди с освобождением занятой динамической памяти (деструктор);

* занесение элемента с левого конца;

* занесение элемента с правого конца;

* извлечение элемента с левого конца;

* извлечение элемента с правого конца;

* печать состояния очереди с использованием указателя на левый конец очереди;

* печать состояния очереди с использованием указателя на правый конец очереди.

Добавление элемента в правый конец очереди

template< class T >

bool UnQueueLimSize< T > :: AddRight(

// false - элемент не добавлен

const T

&add ) // Данное для добавляемог элемента

{

// Очередь заполнена?

if( Size>=MaxSize )

{

return false;

}

// Добавляем элемент в очередь

Right = ( Right+1 ) % MaxSize; pQueue[ Right ] = add;

Size++;

return true;

}

// Добавление элемента в левый конец очереди

template< class T >

bool UnQueueLimSize< T > :: AddLeft(

// false - элемент не добавлен

const T

&add ) // Данное для добавляемого элемента

{

// Очередь заполнена?

if( Size>=MaxSize )

{

return false;

}

// Добавляем элемент в очередь

pQueue[ Left ] = add;

Left = ( Left+MaxSize-1 ) % MaxSize; Size++;

return true;

}

// Извлечение элемента из левого конца очереди

template< class T >

bool UnQueueLimSize< T > :: OutLeft(

// false - извлечение не выполнено

T &out ) // Значение, которое извлекли

{

// Очередь пуста?

if( Size==0 )

{

return false;

}

// Извлекаем элемент из очереди

Left = ( Left+1 ) % MaxSize; out = pQueue[ Left ];

Size--;

return true;

}

// Извлечение элемента из правого конца очереди

template< class T >

bool UnQueueLimSize< T > :: OutRight(

// false - извлечение не выполнено

T &out ) // Значение, которое извлекли

{

// Очередь пуста?

if( Size==0 )

{

return false;

}

// Извлекаем элемент из очереди

out = pQueue[ Right ];

Right = ( Right+MaxSize-1 ) % MaxSize;

Size--;

return true;

}

1 Текст программы

#include "stdio.h"

#include "conio.h"

#include <iostream>

#include <cstdlib>

#include <iostream>

#include <cstdlib>

using namespace std;

template <class T>

class Queue // класс очередь

{

class strucelem // встроенный класс

{

public:

T data;// информационное поле

strucelem * next;// адресное поле

strucelem * prev;

strucelem() { next = 0;prev = 0;}// конструктор

};

strucelem * BeginQ;// указатель на первый элемент

strucelem * LastQ;// указатель на предыдущий элемент

public:

Queue();// коструктор

~Queue();// деструктор

void PrintQueue();// печать очереди

void AddQueue(T data);// добавление элементов в очередь

bool CheckQueue();// проверка состояния очереди

void DelQueue();// удаление из очереди

void DeleteQueue();// удаление очереди

};

// Конструктор.

template <class T>

Queue<T> :: Queue() {

BeginQ = 0;

LastQ = 0;

}

// Деструктор - освобождаем очередь и память выделенную под объекты.

template <class T>

Queue<T> :: ~Queue() {

strucelem *work;

while(BeginQ) {

work = BeginQ->next;

delete BeginQ;

BeginQ = work;

}

BeginQ = NULL;

LastQ = NULL;

}

//Печать очереди

template <class T> void Queue<T>::PrintQueue()

{

strucelem *p = BeginQ;

cout << endl << "Очередь: ";

while (p)

{

cout <<p->data<<' ';

p = p->next;

}

cout << endl;

}

// Положить в очередь.

template <class T>

void Queue <T> :: AddQueue(T data) {

strucelem * link = new strucelem;

if(BeginQ == NULL) {

link->data = data;

BeginQ = link;

LastQ = link;

}

else {

link->data = data;

LastQ->next = link;

LastQ = LastQ->next;

}

}

// Проверить состояние очереди.

template <class T>

bool Queue <T> :: CheckQueue() {

if(BeginQ) return true;

else return false;

}

// Изъять из очереди.

template <class T>

void Queue <T> :: DelQueue() {

strucelem *link;

T p;

if(BeginQ != NULL) {

link = BeginQ;

BeginQ = BeginQ->next;

if(BeginQ == NULL)

LastQ = 0;

p = link->data;

delete link;

// return p;

}

//else return 0;

}

// Очистить очередь.

template <class T>

void Queue <T> :: DeleteQueue() {

strucelem * link;

while(BeginQ) {

link = BeginQ;

BeginQ = BeginQ->next;

if(!BeginQ) LastQ = 0;

delete link;

}

}

int main(){

setlocale(LC_ALL,"Russian");

// Формирование очереди

Queue<int> d;

int iCount = 1;

cout<<"Введите количество элементов (по умолчанию 1):";

cin>>iCount;

if (iCount <= 0)

iCount = 1;

int n = 0;

for(int i=0; i<iCount; i++){

cout<<"\nВведите число =";

cin>>n;

d.AddQueue(n);

}

d.PrintQueue();

//data_int.CheckQueue();

//data_int.PrintQueue();

//Добавление элементов

cout<<"Введите кол-во элементов на добавление:";

cin>> iCount;

for(int i=0; i<iCount; i++){

cout<<"\nВведите число =";

cin>>n;

d.AddQueue(n);

}

d.PrintQueue();

// Удаление элементов

cout<<"Введите кол-во элементов на удаление:";

cin>> iCount;

for(int i=0; i<iCount; i++)

d.DelQueue();

d.PrintQueue();

cout<<" удаление очереди:";

d.DeleteQueue();

d.PrintQueue();

system ("pause");

return 0;

}

Результаты

3 Описание программы

Программа предназначена для работы с универсальной очередью при использовании шаблона класса. В шаблоне класса необходимо предусмотреть методы, выполняющие создание очереди установленного типа, добавление и удаление элементов, вывод содержимого очереди на экран, а также инициализацию и удаление очереди.

Спроектируем шаблон класса Queue с типом T.

Определим интерфейс шаблона класса Queue:

Конструктор Queue ()

Назначение: создает объект класса Queue, т. е. создает очередь, выделяет динамическую память для хранения объекта.

Деструктор ~ Queue ()

Назначение: удаляет выделенную для объекта-очереди память.

Методы:

Добавление элемента n в очередь PutQueue(T data)

Удаление элемента из очереди T GetQueue()

Вывод очереди на экран PrintQueue()

Удаление очереди ClearQueue();

Проверка состояния очереди СheckQueue()

Свойства:

T data - информационное поле объекта-очереди;

strucelem * next- указатель на следующий элемент(адресное поле)

strucelem * prev - указатель на предыдущий элемент

strucelem * BeginQ - указатель на первый элемент;

strucelem * LastQ - указатель на предыдущий элемент;

Заключение

объектное ориентированное программирование очередь

При выполнении курсового проекта был спроектирован шаблон класса для работы с универсальной очередью с методами создания очереди установленного типа, добавления и удаления элементов очереди, вывода содержимого очереди на экран, а также инициализацию и удаление очереди.

В процессе курсового проектирования была разработана программа на языке C++, реализующая выполнение описанных выше функций.

Список использованных источников

1. Герберт Шилдт «Справочник программиста по C/C++, второе издание» - Москва - Санкт-Петербург - Киев 2001 г.

2. Т.А. Павловская «C/C++ программирование на языке высокого уровня» - Москва - Санкт-Петербург 2005 г.

3. Р. Лафоре « Объектно- ориентированное программирование в С++, четвертое издание» - Москва - Санкт-Петербург - Минск 2004 г.

Размещено на Allbest.ru


Подобные документы

  • Разработка класса "очередь с приоритетами" на языке С++ с использованием объектно-ориентированного проектирования. Построение алгоритмов обработки очереди, методов вставки, удаления, вывода на экран элементов. Анализ вариантов реализации очередей.

    курсовая работа [398,6 K], добавлен 28.05.2016

  • Особенности реализации главных элементов разрабатываемой программы (цифровые элементы) с помощью объектно-ориентированного подхода. Применение принципа инкапсуляции для защиты данных. Конструирование классов, описание и тестирование программного продукта.

    курсовая работа [2,3 M], добавлен 10.05.2015

  • Общая характеристика объектно-ориентированного подхода в программировании, его основные свойства и принципы. Разработка программы для автоматизация деятельности кафе на основе объектно-ориентированного подхода, проектирования и реализации схемы данных.

    курсовая работа [1,2 M], добавлен 22.01.2012

  • Описание используемых понятий и механизмов объектно-ориентированного программирования. Разработка и описание необходимых классов. Демонстрационный модуль с кратким описанием использованных стандартных компонентов. Внешний вид и листинг программы.

    курсовая работа [1,3 M], добавлен 24.07.2013

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

    лабораторная работа [212,0 K], добавлен 10.03.2013

  • Методы хеширования данных и реализация хеш-таблиц. Разработка на языке программирования высокого уровня программы с функциями создания хеш-таблицы, добавления в нее элементов, их просмотра, поиска и удаления. Экспериментальный анализ хеш-функции.

    лабораторная работа [231,9 K], добавлен 18.06.2011

  • Концепция объектно-ориентированного программирования. Объектно-ориентированные языки программирования: Smalltalk, Object Pascal, CLOS и C++. Понятие "Объект" и "Класс". Управление доступом к элементам данных классов. Определение функций-членов класса.

    реферат [24,5 K], добавлен 28.10.2011

  • Особенности объектно-ориентированного проектирования. Основные понятия объектно-ориентированного подхода. Основы языка UML, варианты его использования. Диаграммы классов и взаимодействия. Разработка диаграммы прецедентов (вариантов использования).

    курсовая работа [1,1 M], добавлен 13.05.2014

  • Понятие объектно-ориентированного программирования, характеристика используемых языков. Практическая разработка средств объектно-ориентированного программирования в задачах защиты информации: программная реализация на языке С++, а также Turbo Pascal.

    курсовая работа [275,9 K], добавлен 22.12.2011

  • Разработка приложения для работы с базой данных с использованием объектно-ориентированного и визуального программирования. Обзор языка элементов языка программирования Delphi. Проектирование базы данных автозаправки. Клиентская система приложения.

    курсовая работа [2,3 M], добавлен 31.01.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.