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

ЛИЧНЫЙ КАБИНЕТ 

 

Здравствуйте гость!

 

Логин:

Пароль:

 

Запомнить

 

 

Забыли пароль? Регистрация

Повышение уникальности

Предлагаем нашим посетителям воспользоваться бесплатным программным обеспечением «StudentHelp», которое позволит вам всего за несколько минут, выполнить повышение уникальности любого файла в формате MS Word. После такого повышения уникальности, ваша работа легко пройдете проверку в системах антиплагиат вуз, antiplagiat.ru, etxt.ru или advego.ru. Программа «StudentHelp» работает по уникальной технологии и при повышении уникальности не вставляет в текст скрытых символов, и даже если препод скопирует текст в блокнот – не увидит ни каких отличий от текста в Word файле.

Результат поиска


Наименование:


курсовая работа Обработка текстов на С++

Информация:

Тип работы: курсовая работа. Добавлен: 11.08.2012. Сдан: 2011. Страниц: 13. Уникальность по antiplagiat.ru: < 30%

Описание (план):


     АГЕНТСТВО МОРСКОГО И РЕЧНОГО ТРАНСПОРТА 

      САНКТ-ПЕТЕРБУРГСКИЙ  ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ВОДНЫХ КОММУНИКАЦИЙ
     Кафедра ВСиИ
                                                                 

     Курсовое  проектирование
     по  дисциплине «Технология программирования» 

     Тема: «Обработка текстов»
     Вариант № 17
     Работу  выполнила студентка:
     группы  ИС-31
     факультета  ИТ 

     Руководитель  работы:
     доц.каф. ВСиИ к.т.н 
 
 
 

     Санкт-Петербург
     2011 г.
     Содержание
      Введение                                                                                    3
      Теоретические сведения                                                           4
        Объектно-ориентированное программирование        4
        Обобщенное программирование                                  8
        Библиотека iostream                                                      11
        Класс string                                                                     14
        Наследование                                                                 16
      Руководство программиста                                                     17
      Руководство пользователя                                                      18
      Текст задачи                                                                             20
      Листинг программ                                                                   21
        Объектно-ориентированное программирование        21
        Обобщенное программирование                                  30
      Заключение                                                                               35
      Используемая литература                                                       36
 
 
 
 
 
 
 
 
 
 
 
     1.Введение
      "Язык  формирует наш способ мышления  и определяет, о чем мы можем  мыслить." Б.Л. Ворф 
      C++ - универсальный язык программирования, задуманный так, чтобы сделать  программирование более приятным  для серьезного программиста. За  исключением второстепенных деталей  C++ является надмножеством языка  программирования C. Помимо возможностей, которые дает C, C++ предоставляет  гибкие и эффективные средства  определения новых типов. Используя  определения новых типов, точно  отвечающих концепциям приложения, программист может разделять  разрабатываемую программу на  легко поддающиеся контролю части.  Такой метод построения программ  часто называют абстракцией данных. Информация о типах содержится  в некоторых объектах типов,  определенных пользователем. Такие  объекты просты и надежны в  использовании в тех ситуациях,  когда их тип нельзя установить  на стадии компиляции. Программирование  с применением таких объектов  часто называют объектно-ориентированным.  При правильном использовании  этот метод дает более короткие, проще понимаемые и легче контролируемые  программы.  
 Ключевым понятием C++ является класс. Класс - это тип, определяемый пользователем. Классы обеспечивают скрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. C++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В C++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем.  
 C++ и его стандартные библиотеки спроектированы так, чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет идти в большинстве систем, поддерживающих C. Из C++ программ можно использовать C библиотеки, и с C++ можно использовать большую часть инструментальных средств, поддерживающих программирование на C.  
 
 

2. Теоретическая часть
     Объектно-ориентированное  программирование.
     Объектно-ориентированное или объектное программирование (в дальнейшем ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов (либо, в менее известном варианте языков с прототипированием, — прототипов). Это новый подход к созданию программ. По мере развития вычислительной техники возникали разные методики программирования. На каждом этапе создавался новый подход, который помогал программистам справляться с растущим усложнением программ. ООП позволяем нам разложить проблему на составные части. Каждая составляющая становится самостоятельным объектом, содержащим свои собственные кода и данные, которые относятся к этому объекту. В этом случае вся процедура в целом упрощается, и программист получает возможность оперировать с гораздо большими по объему программами.
     ООП ориентировано на разработку крупных  программных комплексов, разрабатываемых  командой программистов (возможно, достаточно большой). Проектирование системы в  целом, создание отдельных компонент  и их объединение в конечный продукт  при этом часто выполняется разными  людьми, и нет ни одного специалиста, который знал бы о проекте всё.
     Класс — разновидность абстрактного типа данных в объектно-ориентированном программировании (ООП), характеризуемый способом своего построения. Другие абстрактные типы данных — метаклассы, интерфейсы, структуры, перечисления, — характеризуются какими-то своими, другими особенностями. Наряду с понятием «объекта» класс является ключевым понятием в ООП. Суть отличия классов от других абстрактных типов данных состоит в том, что при задании типа данных класс определяет одновременно и интерфейс, и реализацию для всех своих экземпляров, а вызов метода-конструктора обязателен.
     На  практике объектно-ориентированное  программирование сводится к созданию некоторого количества классов, включая  интерфейс и реализацию, и последующему их использованию. Графическое представление  некоторого количества классов и  связей между ними называется диаграммой классов. Объектно-ориентированный  подход за время своего развития накопил  множество рекомендаций (паттернов) по созданию классов и иерархий классов.
     Мы  живем в мире объектов. Стол, автомобиль, ручка, классная доска – все это  объекты. Наряду с физическими существуют так же абстрактные объекты, типичными  представителями которых являются числа. Таким образом, объект – это любая физическая или абстрактная четко идентифицируемая сущность, это общефилософское понятие, которое изучалось философами на протяжении длительного времени, это сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса (например, после запуска результатов компиляции (и связывания) исходного кода на выполнение). Прототип — это объект-образец, по образу и подобию которого создаются другие объекты.
     Объекты характеризуются атрибутами. Помимо атрибутов объекты обладают некоторыми функциональными возможностями, которые  в объектно-ориентированном программировании (ООП) называют операциями или методами.
     Таким образом, объект инкапсулирует атрибуты и методы, скрывая от других объектов взаимодействующих с ним и  использующих его функциональность, свою реализацию.
     Инкапсуляция  или сокрытие реализации является базовым  свойством ООП. Она позволяет  создавать пользовательские объекты, обладающие требуемыми методами и далее  оперировать ими, не вдаваясь в устройство этих объектов.
     Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейсную часть класса (т. е. список декларируемых свойств и методов класса) и не вникать в его внутреннюю реализацию. Поэтому данные принято инкапсулировать в классе таким образом, чтобы доступ к ним по чтению или записи осуществлялся не напрямую, а с помощью методов. Принцип инкапсуляции (теоретически) позволяет минимизировать число связей между классами и, соответственно, упростить независимую реализацию и модификацию классов. Объект – это экземпляр некоторого класса объектов или просто класса.
     Наследование. Классы могут быть связаны друг с другом различными отношениями. Одним из основных таких отношений является отношение класс – подкласс, известный в объектно-ориентированном программировании как наследование.
     Наследованием называется возможность порождать  один класс от другого с сохранением  всех свойств и методов класса-предка (прародителя, иногда его называют суперклассом) и добавляя, при необходимости, новые  свойства и методы. Набор классов, связанных отношением наследования, называют иерархией. Наследование призвано отобразить такое свойство реального  мира, как иерархичность.
     При наследовании все атрибуты и методы родительского класса наследуются  классом-потомком. Наследование может  быть многоуровневым, и тогда классы, находящиеся на нижних уровнях иерархии, унаследуют все свойства (атрибуты и методы) всех классов, прямыми или  косвенными потомками которых они  являются.
     Помимо  единичного, существует и множественное  наследование, когда класс наследует  сразу нескольким классам.  При  этом он унаследует свойства всех классов, потомком которых он является.  При  использовании множественного наследования необходимо быть особенно внимательным, так как возможны коллизии, когда  класс-потомок может унаследовать одноименные свойства, с различным  содержанием. При наследовании одни методы класса могут замещаться другими.
     Полиморфизм – это выполнение методом с одним и тем же именем различных действий в зависимости от контекста, в частности, от принадлежности тому или другому классу. В разных языках программирования полиморфизм реализуется различными способами. В C++ он реализован с помощью механизма виртуальных функций.
     Другим  основным видом отношений между  классами и объектами является агрегация. Она означает, что один класс содержит в себе в качестве агрегатов (составных  частей, подсистем) другие классы.
     Абстракция — это придание объекту характеристик, которые отличают его от всех других объектов, четко определяя его концептуальные границы. Основная идея состоит в том, чтобы отделить способ использования составных объектов данных от деталей их реализации в виде более простых объектов, подобно тому, как функциональная абстракция разделяет способ использования функции и деталей её реализации в терминах более примитивных функций, таким образом, данные обрабатываются функцией высокого уровня с помощью вызова функций низкого уровня.
     Такой подход является основой объектно-ориентированного программирования. Это позволяет работать с объектами, не вдаваясь в особенности их реализации. В каждом конкретном случае применяется тот или иной подход: инкапсуляция, полиморфизм или наследование. Например, при необходимости обратиться к скрытым данным объекта, следует воспользоваться инкапсуляцией, создав, так называемую, функцию доступа или свойство.
     Композиция  является еще одним отношением, родственным  агрегации. Но если в агрегации агрегаты принадлежат классу или объекту, то в композиции существует более  слабая связь. Как и в случае агрегации, отношение композиции имеет кратность. Агрегация и композиция являются подклассами класса отношений ассоциации. Ассоциация обозначается в виде линии  без стрелок и ромбиков и может  принимать вид как агрегации, так и композиции. На ранних этапах объектно-ориентированного анализа и проектирования часто задаются отношения ассоциаций, а свою конкретизацию в виде агрегаций и композиций они получают на более поздних этапах.
     Существует  заблуждение, что объектно-ориентированное  программирование является чем-то сложным  и непонятным. Но объектная декомпозиция является ничуть не менее естественной и интуитивно понятной, чем алгоритмическая, которая безраздельно властвовала  до появления ООП. В программирование основные понятия ООП перешли  из других областей знаний, таких как  философия, логика, математика и семиотика, причем, не претерпев особых изменений, по крайней мере того, что касается сути этих понятий. Объектный способ декомпозиции (представления) является естественным, и применяется на протяжении многих веков. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

     Обобщенное  программирование.
     Обобщённое  программирование  — парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание. В том или ином виде поддерживается разными языками программирования.
     Средства  обобщённого программирования реализуются  в языках программирования в виде тех или иных синтаксических средств, дающих возможность описывать данные (типы данных) и алгоритмы (процедуры, функции, методы), параметризуемые типами данных. У функции или типа данных явно описываются формальные параметры-типы. Это описание является обобщённым и  в исходном виде непосредственно  использовано быть не может.
     В тех местах программы, где обобщённый тип или функция используется, программист должен явно указать  фактический параметр-тип, конкретизирующий описание. Например, обобщённая процедура  перестановки местами двух значений может иметь параметр-тип, определяющий тип значений, которые она меняет местами. Когда программисту нужно  поменять местами два целых значения, он вызывает процедуру с параметром-типом  «целое число» и двумя параметрами — целыми числами, когда две строки — с параметром-типом «строка» и двумя параметрами — строками. В случае, с данными программист может, например, описать обобщённый тип «список» с параметром-типом, определяющим тип хранимых в списке значений. Тогда при описании реальных списков программист должен указать обобщённый тип и параметр-тип, получая, таким образом, любой желаемый список с помощью одного и того же описания.
     Компилятор, встречая обращение к обобщённому  типу или функции, выполняет необходимые  процедуры статического контроля типов, оценивает возможность заданной конкретизации и при положительной  оценке генерирует код, подставляя фактический  параметр-тип на место формального  параметра-типа в обобщённом описании. Естественно, что для успешного  использования обобщённых описаний фактические типы-параметры должны удовлетворять определённым условиям. Если обобщённая функция сравнивает значения типа-параметра, любой конкретный тип, использованный в ней, должен поддерживать операции сравнения, если присваивает  значения типа-параметра переменным — конкретный тип должен обеспечивать корректное присваивание.
     Известно  два основных способа реализации поддержки обобщённого программирования в компиляторе.
     Порождение  нового кода для каждой конкретизации. В этом варианте компилятор рассматривает  обобщённое описание как текстовый шаблон для создания вариантов конкретизаций. Когда компилятору требуется новая конкретизация обобщённого типа или процедуры, он создаёт новый экземпляр типа или процедуры, чисто механически добавляя туда тип-параметр. То есть, имея обобщённую функцию перестановки элементов, компилятор, встретив её вызов для целого типа, создаст функцию перестановки целых чисел и подставит в код её вызов, а затем, встретив вызов для строкового типа — создаст функцию перестановки строк, никак не связанную с первой.
     Достоинство. Этот метод обеспечивает максимальное быстродействие исполнения программы, поскольку варианты конкретизаций  становятся разными фрагментами  программы, каждый из них может быть оптимизирован для своего типа-параметра, к тому же в код не включаются никакие лишние элементы, связанные  с проверкой или преобразованием  типов на этапе исполнения программы.
     Недостаток. Недостатком его является то, что  при активном использовании обобщённых типов и функций с различными типами-параметрами размер откомпилированной  программы может очень сильно возрастать, поскольку даже для тех  фрагментов описания, которые для  разных типов не различаются, компилятор всё равно генерирует отдельный  код. Этот недостаток можно затушевать путём частичной генерации общего кода (часть обобщённого описания, которая не зависит от типов-параметров, оформляется специальным образом  и по ней компилятор генерирует единый для всех конкретизаций код). Зато данный механизм даёт естественную возможность  создания специальных (обычно — сильно вручную оптимизированных) конкретизаций обобщённых типов и функций для некоторых типов-параметров.
     Порождение  кода, который во время исполнения выполняет преобразование фактических  параметров-типов к одному типу, с которым фактически и работает. В этом случае на этапе компиляции программы компилятор лишь проверяет  соответствие типов и включает в  код команды преобразования конкретного  типа-параметра к общему типу. Код, определяющий функционирование обобщённого  типа или функции, имеется в откомпилированной  программе в единственном экземпляре, а преобразования и проверки типов  выполняются динамически, во время  выполнения программы. В этом варианте порождается, как правило, более  компактный код, но программа оказывается  в среднем медленнее, чем в  первом варианте, из-за необходимости  выполнения дополнительных операций и  меньших возможностей оптимизации. Кроме того, в компилированный  код для типов-параметров далеко не всегда включается динамическая информация о типах (в первом варианте она есть, если вообще поддерживается, поскольку конкретизации для каждого типа-параметра различны), что определяет некоторые ограничения на применение обобщённых типов и функций. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

     Библиотека  iostream.
Частью  стандартной библиотеки C++ является библиотека iostream – объектно-ориентированная  иерархия классов, где используется и множественное, и виртуальное  наследование. В ней реализована  поддержка для файлового ввода/вывода данных встроенных типов. Кроме того, разработчики классов могут расширять  эту библиотеку для чтения и записи новых типов данных.
Для использования  библиотеки iostream в программе необходимо включить заголовочный файл
#include <iostream>
Операции  ввода/вывода выполняются с помощью  классов istream (потоковый ввод) и ostream (потоковый вывод). Третий класс, iostream, является производным от них и  поддерживает двунаправленный ввод/вывод. Для удобства в библиотеке определены три стандартных объекта-потока:
    cin – объект класса istream, соответствующий стандартному вводу. В общем случае он позволяет читать данные с терминала пользователя;
    cout – объект класса ostream, соответствующий стандартному выводу. В общем случае он позволяет выводить данные на терминал пользователя;
    cerr – объект класса ostream, соответствующий стандартному выводу для ошибок. В этот поток мы направляем сообщения об ошибках программы.
Вывод осуществляется, как правило, с помощью  перегруженного оператора сдвига влево (<<), а ввод – с помощью оператора  сдвига вправо (>>).
     Потоки  для работы с файлами создаются  как объекты следующих классов:
    ofstream - для вывода (записи) данных в файл;
    ifstream - для ввода (чтения) данных из файла;
    fstream - для чтения и для записи данных (двунаправленный обмен).
     Чтобы использовать эти классы, в текст  программы необходимо включить дополнительный заголовочный файл <fstream>. После этого в программе можно определять конкретные файловые потоки, соответствующих типов (объекты классов ofstream, ifstream, fstream), например, таким образом:
    ofstream outFile; // Выходной файловый поток.
    ifstream inFile; // Входной файловый поток.
    fstream ioFile; // Файловый поток для ввода и вывода.
     Работа  с файлом обычно предполагает следующие  операции:
      создание потока (потокового объекта);
      открытие потока и связывание его с файлом;
      обмен с потоком (ввод/вывод);
      закрытие файла.
     Классы  файловых потоков содержат несколько  конструкторов, позволяющие варьировать  способы создания потоков. Конструкторы с параметрами создают объект соответствующего класса, открывают  файл с указанным именем и связывают  файл с объектом. Конструкторы без  параметров создают объект соответствующего класса, но не связывают его с  файлом.
     После того как файловый поток открыт, работа с ним чрезвычайно проста: с входным потоком можно обращаться так же, как с стандартным объектом cin, а с выходным потоком – так же, как со стандартным объектом cout. При чтении данных из входного файла иногда требуется контролировать, был ли достигнут конец файла после очередной операции ввода. Это позволяет делать метод eof(), возвращающий нулевое значение, если конец файла еще не достигнут, и ненулевое значение – если уже достигнут. Когда программа покидает область видимости потокового объекта, он уничтожается. При этом перестает существовать связь между потоковым объектом и физическим файлом, а физический файл закрывается. Если алгоритм требует более раннего закрытия файла можно воспользоваться методом close().
     Создание  файлового потока (объекта соответствующего класса) связывает имя потока с  выделяемым для него буфером и  инициализирует переменные состояния  потока. Так как перечисленные  классы файловых потоков наследуют  свойства класса ios, то и переменные состояния каждого файлового потока наследуются из этого базового класса. Так как файловые классы являются производными от классов ostream (класс ofstream), istream (класс ifstream), stream (класс fstream), то они поддерживают описанный в предыдущих шагах форматированный и бесформатный обмен с файлами. Однако прежде чем выполнить обмен, необходимо открыть соответствующий файл и связать его с файловым потоком.
     Открытие  файла в самом общем смысле означает процедуру, информирующую  систему о тех действиях, которые  предполагается выполнять с файлом. Существуют функции стандартной  библиотеки языка С для открытия файлов fopen(), open(). Но работая с файловыми потоками библиотеки ввода-вывода языка С++, удобнее пользоваться компонентными функциями соответствующих классов.
     Создав  файловый поток, можно "присоединить" его к конкретному файлу с  помощью компонентной функции open(). Функция open() унаследована каждым из файловых классов ofstream, ifsream, fstream от класса fstreambase. С ее помощью можно не только открыть файл, но и связать его с уже определенным потоком. 
 
 
 
 
 
 
 
 
 
 
 
 

     Класс string.
     С++ не поддерживает встроенный строковый  тип. Однако он предоставляет два  способа обработки строк. Во-первых, для представления строк можно  использовать традиционный символьный массив с завершающим нулем. Во-вторых, можно использовать объекты класса string. Класс string обеспечивают альтернативу для строк с завершающим нулем.
     В действительности класс string представляет собой специализацию более общего шаблонного класса basic_ string. Существуют две специализации типа basic_ string: тип string, который поддерживает 8-битовые символьные строки, и тип wstring, который поддерживает строки, образованные двухбайтовыми символами. Чаще всего в обычном программировании используются строковые объекты типа string. Для использования строковых классов С++ необходимо включить в программу заголовок < string >.
     Стандартные классы не сразу были добавлены в  определение языка С++. При том, сто С++ уже содержит поддержку  строк в виде массивов с завершающим  нулем. Но строки с завершающим нулем  нельзя обрабатывать стандартными С++-операторами, и их нельзя использовать в обычных  С++-выражениях. Это лишает «изящества»  даже самые элементарные операции со строками. И именно неспособность  обрабатывать строки с завершающим  нулем привела к разработке стандартного строкового класса. Создавая класс  в С++, мы определяем новый тип  данных, который можно полностью  интегрировать в С++-среду. Это, конечно  же, означает, что для нового класса можно перегружать операторы. Следовательно, вводя в язык стандартный строковый  класс, мы создаем возможность для  обработки строк так же, как  и данных любого другого типа, а  именно посредством операторов.
     Важной  причиной создания класса string является безопасность. Руками неопытного пользователя или неосторожного программиста очень легко обеспечить выход за границы массива, который содержит строку с завершающим нулем.
     Итак  существуют три причины для включения  в С++ стандартного класса string:
      Непротиворечивость данных (строка теперь определяется самостоятельным типом данных);
      Удобство (программист может использовать стандартные операторы С++);
      Безопасность (границы массивов не будут нарушаться)
     Использование нового класса string дает доступ к безопасному и полностью интегрированному способу обработки строк. Класс string представляет собой еще один контейнерный класс, определенный в С++. Он поддерживает алгоритмы и строки имеют дополнительные возможности. Класс string очень большой, он содержит множество конструкторов и функций-членов. Кроме того, многие функции-члены имеют несколько перегруженных форм. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

     Наследование.
      Наследование  называется простым (одиночным), когда  каждый класс порождается только от одного базового класса. В С++ наследование может быть множественным. Множественное  наследование означает, что производный    класс  наследует элементы нескольких базовых  классов . При порождении  класса  из базового  класса  этот базовый класс  может  наследоваться  как public (открытый), protected (защищенный) или private (закрытый). При порождении  класса  как public открытые элементы базового класса становятся открытыми элементами производного класса, а защищенные элементы базового класса - защищенными элементами производного класса. Закрытые элементы базового класса никогда не бывают доступны для производного класса. При защищенном наследовании открытые и защищенные элементы базового  класса  становятся защищенными элементами производного  класса . При закрытом наследовании открытые и защищенные элементы базового  класса 
и т.д.................


Перейти к полному тексту работы


Скачать работу с онлайн повышением уникальности до 90% по antiplagiat.ru, etxt.ru или advego.ru


Смотреть полный текст работы бесплатно


Смотреть похожие работы


* Примечание. Уникальность работы указана на дату публикации, текущее значение может отличаться от указанного.