Глава 1. Проектирование классов — КиберПедия 

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Глава 1. Проектирование классов

2020-04-01 114
Глава 1. Проектирование классов 0.00 из 5.00 0 оценок
Заказать работу

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ

Глава 1. Проектирование классов

Формализация задачи

1.2 Проектирование абстракции данных

    Определение семантики классов

    Определение отношений между классами

Глава 2. Реализация

2.1 Реализация класса TList

Реализация класса TBasicIterator

Реализация класса TArrayIterator

Реализация класса TLineIterator

Реализация класса TReverseIterator

Реализация класса TListException

Глава 3. Результаты

ЗАКЛЮЧЕНИЕ

СПИСОК ЛИТЕРАТУРЫ

ПРИЛОЖЕНИЕ

 


ВВЕДЕНИЕ

Объектно-ориентированная парадигма программирования не нова. Её истоки восходят к Симуле-67, хотя первая впервые она была полностью реализована в Smalltalk-80. ООП (Объектно-ориентированное программирование) приобрело популярность во второй половине 80-х вместе с такими языками, как С++, Objective C (другое расширение C), Object Pascal и Turbo Pascal, CLOS (обектно-ориентированное расширение Lisp'a), Eiffel, Ada (в её последних воплощениях) и недавно - в Java. В этой статье внимание сосредоточена на C++, Object Pascal и Java, иногда упоминаются и другие языки.

Ключевые черты ООП хорошо известны:

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

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

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

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

Алан Кей в свое время вывел пять основных черт языка Smalltalk - первого удачного ОО языка:

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

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

У каждого объекта есть тип. Иногда тип называют еще и классом. Класс (тип) определяет какие сообщения объекты могут посылать друг другу. Например, аккумуляторная батарея может передавать электролампе ток, а вот момент или физическое усилие - нет.

Все объекты одного типа могут получать одинаковые сообщения. К примеру, у нас есть 2 объекта: синяя и красная кружки. Обе разные по форме и материалу. Но из обеих мы можем пить (или не пить, если они пустые). В данном случае кружка - это тип объекта.

Самое лаконичное описание объекта предложил Буч: «Объект обладает состоянием, поведением и индивидуальностью».

 


 

Глава 1. Проектирование классов

Формализация задачи

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

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

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

Глава 2. Реализация

Для решения поставленной задачи я использовал язык программирования C++. Программа разработана в среде Microsoft Visual Studio 2012, консольное приложение Win32. Операционная система Windows 7.

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

Каждый класс состоит из двух файлов: интерфейсной части - «ClassName.h» и реализационной - «ClassName.cpp».

 

Реализация класса TList

template<typename T>TList

{TListBasicIterator<T>;:<T>* first;<T>* cur;<T>& CreateFirst(T val);:operator=(const TList<T>&);(const TList<T>&);isEmpty();isEnd();& Rewind();& Set(T val);Get();& Next();& InsertAfterCurrent(T val);& AddLast(T val);& DeleteCurrent();(void);

~TList(void);ostream& operator<<(ostream& os, TList<T>& li)

{(li.isEmpty())

{<< "Empty";os;

}.Rewind();(!li.isEnd())

{<< li.Get() << " ";.Next();

}.Rewind();os;

}

};

 

Глава 3. Результаты

 

Для демонстрации работы программы был создан список l типа TList<int>, куда были добавлены 3 элемента. Затем был создан итератор прямого обхода, с помощью которого элементы были выведены на экран. После этого, итератором обратного обхода, значение каждого элемента списка было увеличено на единицу. В заключение итератором массива элементы были выведены на экран. Для проверки на экран выводится сам список, что показывает, что итераторы могут изменять значения элементов списка, обходить список, но не изменять положения внутреннего указателя в самом контейнере.

Результаты работы приведены на рисунке 2:

 

Рисунок 2 - Результаты работы

 

В ходе работы программы был создан контейнер для списка, наполнен элементами, после чего были созданы три итератора для работы с этим контейнером, что и требовалось при постановке задачи.

 


ЗАКЛЮЧЕНИЕ

 

В результате выполнения курсовой работы поставленная задача была решена. Были созданы контейнер для списка и три итератора для работы с этим контейнером.

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

Применил полученные знания на практике. Результат - работающая программа, которая решает поставленную задачу.

 

 


 

СПИСОК ЛИТЕРАТУРЫ

1. Лафоре, Р Объектно-ориентированное программирование в C++. - 4-е изд. - М.: СПб.: Питер, 2010. - 923 с.

2. Лекция №3: Диаграмма классов: крупным планом // INTUI.ru

.   Кораблев, В Самоучитель Visual C ++. NET / В. Кораблев. - СПб.: Питер: BHV, 2009. - 527 с.

.   Павловская, Т.А. C++. Объектно-ориентированное программирование: практикум: учеб. пособие для вузов по спец. "Информатика и вычисл. техника" / Т.А. Павловская, Ю.А. Щупак. - СПб.: Питер, 2010. - 264 с.

.   Объектное программирование // C++ для начинающих

 

 


 

ПРИЛОЖЕНИЕ (обязательное)

 

Полный код программы

 

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ

Глава 1. Проектирование классов

Формализация задачи

1.2 Проектирование абстракции данных

    Определение семантики классов

    Определение отношений между классами

Глава 2. Реализация

2.1 Реализация класса TList

Реализация класса TBasicIterator

Реализация класса TArrayIterator

Реализация класса TLineIterator

Реализация класса TReverseIterator

Реализация класса TListException

Глава 3. Результаты

ЗАКЛЮЧЕНИЕ

СПИСОК ЛИТЕРАТУРЫ

ПРИЛОЖЕНИЕ

 


ВВЕДЕНИЕ

Объектно-ориентированная парадигма программирования не нова. Её истоки восходят к Симуле-67, хотя первая впервые она была полностью реализована в Smalltalk-80. ООП (Объектно-ориентированное программирование) приобрело популярность во второй половине 80-х вместе с такими языками, как С++, Objective C (другое расширение C), Object Pascal и Turbo Pascal, CLOS (обектно-ориентированное расширение Lisp'a), Eiffel, Ada (в её последних воплощениях) и недавно - в Java. В этой статье внимание сосредоточена на C++, Object Pascal и Java, иногда упоминаются и другие языки.

Ключевые черты ООП хорошо известны:

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

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

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

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

Алан Кей в свое время вывел пять основных черт языка Smalltalk - первого удачного ОО языка:

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

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

У каждого объекта есть тип. Иногда тип называют еще и классом. Класс (тип) определяет какие сообщения объекты могут посылать друг другу. Например, аккумуляторная батарея может передавать электролампе ток, а вот момент или физическое усилие - нет.

Все объекты одного типа могут получать одинаковые сообщения. К примеру, у нас есть 2 объекта: синяя и красная кружки. Обе разные по форме и материалу. Но из обеих мы можем пить (или не пить, если они пустые). В данном случае кружка - это тип объекта.

Самое лаконичное описание объекта предложил Буч: «Объект обладает состоянием, поведением и индивидуальностью».

 


 

Глава 1. Проектирование классов

Формализация задачи

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

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

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


Поделиться с друзьями:

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.035 с.