Некоммерческое акционерное общество

АЛМАТИНСКИЙ ИНСТИТУТ ЭНЕРГЕТИКИ И СВЯЗИ

Кафедра электроники и компьютерных технологий

 

 

 

 

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ  

Методические указания к выполнению курсовых работ  

(для студентов обучающихся  специальности

050704 – Вычислительная техника и программное обеспечение, 050703 – Информационные системы )

 

 

Алматы 2009

      СОСТАВИТЕЛЬ: Бимагамбетов Т.С. Объектно-ориентированное программирование (ООП).   Методические указания к выполнению курсовых работ (для студентов обучающихся  специальности 050704 – Вычислительная техника и программное обеспечение, 050703 – Информационные системы ). –Алматы: АИЭС. 2009.

 

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

  

      Ил.4, библиогр. – 10 назв.

  

 Рецензент: ст. преподаватель А.А. Аманбаев

  

     Печатется по плану издания Алматинского института энергетики и связи на 2009 г.

 

 

@ Алматинский институт энергетики и связи, 2009 г.

 

      Введение    

 Данные методические указания предназначен для студентов  специальности 050704, 050703 учебный план которых предусматривает выполнение курсовой работы по ООП.

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

 

1.     Цель курсовой работы

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

 

2.     Предмет курсовой работы

 

Выполнение курсовой работы дает возможность студенту:

- получить навыки работы литературой, системой государственных  стандартов;

- познакомится с основными этапами разработки программы;

- закрепить знания методов составления программы;

- изучить основу ООП подхода программирования;

 

3.     Тематика заданий

Задания на работу выдаются студентам индивидуально преподавателем соответственно рабочей программе учебной дисциплины.

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

Первая программа должна использовать технологию ООП. В рамках этой программы следует спроектировать базовый и производный классы или их шаблоны и выполнить их тестирование. Для ввода-вывода следует применить средства языка С++. Основными этапами выполнения этой программы должны быть:

 

Разработка спецификации.

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

1.        Разработка программных текстов.

На этом этапе разработайте программные тексты для каждого из классов и текст тестирующей программы.

2.        Отладка программного проекта.

3.        Оформление программной документации в соответствии с Единой Системой Программной Документации (ЕСПД) в виде отчета.

Перечислим разделы отчета.

q      Техническое задание — формулировка решаемой задачи, требования к программе, язык программирования.

q      Текст программы. В этом разделе для каждого из спроектированных классов следует указать его назначение и привести листинг с исходным текстом в самодокументированном виде.

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

q      Программа и методика испытаний. Здесь следует привести результаты тестирующей программы и набор контрольных примеров с его обоснованием.  

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

Далее приводятся возможные варианты заданий на выполнение курсовой работы.

 

Рекомендуется следующий примерный перечень  тем:

1. Разработайте класс Trapezium_Prism (прямая призма, в основании – трапеция), который должен содержать закрытые  переменные: a,b – параллельные стороны, h-высота трапеции-основания, H – высота призмы.

Разработанный класс должен содержать метод set_init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

             Sполн = 2Sосн + Sбок

а также методы вывода полученных значений площадей.

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

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

Введите еще одну закрытую переменную класса для хранения имени объекта. Выделение памяти для имени объекта (посредством оператора new) и его инициализацию проводите в конструкторе, освобождение выделенной памяти (посредством оператора delete) – в деструкторе.  

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

 

2. Задан исходный текст на русском языке. Длина текста — не более NL строк, длина строки — не более NS символов, длина слова — не более NW символов. Исходный текст должен заканчиваться точкой ('!', '?'). Составить программу, которая в заданном тексте находит слово (слова) максимальной длины. В файле результатов должен быть исходный текст, значение максимальной длины слова, список найденных слов (через запятую) и их количество.

3. Исходные данные представлены в двух файлах. Первый файл содержит словарь русских слов (прописными буквами), разделенных запятыми. После последнего слова должна стоять точка. Длина текста — не более NUMW слов, длина строки — не более NS символов, длина слова — не более NW символов. Второй файл содержит приставки, допустимые правилами словообразования. Составить программу, которая в файл вывода выводит исходный текст, список существующих приставок и преобразованный текст, в котором найденные приставки отделены от остальной части слова символом '-'.

4. Векторная арифметика. Элементы вектора могут быть любого типа с плавающей точкой. Реализовать перегрузку различных операций над векторами и некоторую обработку вектора. Для решения данной задачи использовать шаблон базовых классов (размещение вектора в динамической памяти и его инициализация — конструктор, при необходимости — конструктор копирования, деструктор, заполнение вектора значениями из файла, печать содержимого вектора в файл) и шаблон производных классов (перегрузить операции сложения, вычитания, умножения и деления векторов, "[]", поиск максимального числа, встречающегося в заданном векторе более одного раз

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

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

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

- Определить радиус и центр окружности, на которой лежит наибольшее число точек заданного на плоскости множества точек.

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

 

4.     содержание и объем курсовой работы

      Курсовая работа должна содержать:

     - расчетно-пояснительную записку объемом 20-25 страниц текста;

     - графическую часть на листах формата А4.

      

      4.1. Пояснительная записка

       Пояснительная записка должна содержать:

      - титульный лист;

      - задание;

      - содержание;

     - введение;

- листинг программы;

     - результаты программы;

     - заключение;

     - список литературы;

     - приложения. 

 

5.     Примеры 

 

Разработайте класс Trapezium_Prism (прямая призма, в основании – трапеция), который должен содержать закрытые  переменные: a,b – параллельные стороны, h-высота трапеции-основания, H – высота призмы.

Разработанный класс должен содержать метод set_init() инициализации указанных переменных, а также методы, вычисляющие и возвращающие значения площадей основания get_So(), боковой get_Sb() и полной get_Sp() поверхностей по формулам:

             Sполн = 2Sосн + Sбок

а также методы вывода полученных значений площадей.

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

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

Введите еще одну закрытую переменную класса для хранения имени объекта. Выделение памяти для имени объекта (посредством оператора new) и его инициализацию проводите в конструкторе, освобождение выделенной памяти (посредством оператора delete) – в деструкторе.  

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

 

Задача1.1

Листинг программы

//---------------------------------------------------------------------------

 

#pragma hdrstop

 #include <iostream.h>

#include <conio.h>

#include <math.h>

#include <tchar.h>

//---------------------------------------------------------------------------

 

#pragma argsused

class Trapezium_Prism

{

public:

   void init();

         void display();

   void get();

   float get_So();

   float get_Sb();

   float get_Sp();

private:

         float a,b,h,H;

};

void Trapezium_Prism::init()

  

{

   float a,b,h,H;

 

  cout<<endl<<" Vvedite a-";

   cin>>a;

           cout<<endl<<" Vvedite b-";

   cin>>b;

         cout<<endl<<" Vvedite h-";

   cin>>h;

           cout<<endl<<" Vvedite H-";

   cin>>H;

         Trapezium_Prism::a = a;

         Trapezium_Prism::b = b;

         Trapezium_Prism::h = h;

         Trapezium_Prism::H = H;

 

}

 

void Trapezium_Prism::display()

{

         cout<<endl<<" Ploshad osnovaniya Trapezium_Prism - "<<get_So()<<endl;

 

         cout<<endl<<" Ploshad bokovoi poverhnosti Trapezium_Prism - "<<get_Sb()<<endl;

         cout<<endl<<" Polnaya ploshad Trapezium_Prism - "<<get_Sp()<<endl;

}

 

float Trapezium_Prism::get_So()

{

         return (a+b)*(h/2);

}

 

float Trapezium_Prism::get_Sb()

{

         return (a+b+2*sqrt(1/4*(a-b)*(a-b)+h*h)*H);

}

 

float Trapezium_Prism::get_Sp()

{

         return 2*get_So()+get_Sb();

}

 

 

int _tmain(int argc, _TCHAR* argv[])

 

{        Trapezium_Prism C, *PC;

   C.init();

   C.display();

   cout<<endl<<" Inicializaciya objekta cherez ukazatel"<<endl;

   PC->init();

   PC->display();

   getch();

 

         return 0;

}

//---------------------------------------------------------------------------

 

Задача1.2

#pragma hdrstop

 #include <iostream.h>

#include <conio.h>

#include <math.h>

#include <tchar.h>

//---------------------------------------------------------------------------

 

#pragma argsused

class Trapezium_Prism

{

private:

         float a,b,H,h;

   char *name;

public:

  Trapezium_Prism(        float x,        float y,        float z,         float q,char *s)

   {  int length = strlen(s);

      name = new char[length+1];

      strcpy(name,s);

  cout<<" Name of object is "<<name<<endl;

      a=x;

      b=y;

           H=z;

           h=q;

   }

   ~Trapezium_Prism()

   {

      cout<<" Destroying ";

      getch();

                   delete [] name;

   }

         float get_So()

   {return (a+b)*(h/2);}

         double get_Sb()

   {return  (a+b+2*sqrt(1/4*((a-b)*(a-b))+h*h))*H;   }

   double get_Sp()

   {return 2*get_So()+get_Sb();}

};

 

int _tmain(int argc, _TCHAR* argv[])

{        float a,b,H,h;

   cout<<"a, b, H, h: ";

   cin>>a>>b>>H>>h;

   Trapezium_Prism pr(a,b,H,h,"Pryamaya prizma");

   cout<<"So= "<<pr.get_So()<<endl;

   cout<<"Sb= "<<pr.get_Sb()<<endl;

   cout<<"Sp= "<<pr.get_Sp()<<endl;

   getch();

 

         return 0;

}

 

Результат:

 

Список литературы 

1.     Фридман А.Л. Язык программирования С++.Курс лекций.- Москва: Интернет – Университет информационных технологий, 2003.

2.  Лафоре Р. Объектно – ориентированное  программирование в С++.

- Санкт – Петербург: Питер, 2003.

3. Подбельский В.В. Язык СИ++: Учебное пособие. – М.: Финансы и статистика, 2001.

4.  Культин  Н. С/С++ в задачах и примерах. – Санкт –Петербург: БХВ-Петербург, 2004.

5. Давыдов В.Г. Технология программирование С++: Учебное пособие. – СПб.: БХВ – Петербург, 2005.

6. Керниган Б., Ритчи Д. Язык программирования С++: Курс лекций. –М.:Финансы и статистика, 2001.

7. Блоски М.И. Объектно-ориентированное программирование. –М. : Радио и связи. 1999. 276 с.

8. Шиманович Е. С/С++ в примерах и задачах: Учебное пособие. –Мн.: Новое  знание, 2004.

9. Бимагамбетов Т.С. Программирование на языке Си++: Учебное пособие. – Алматы: АИЭС, 2007

10. Бимагамбетов Т.С. : Объектно – ориентированное  программирование на языке С++. Методическое указания к выполнению лабораторных работ – Алматы: АИЭС, 2006

 

СОДЕРЖАНИЕ 

Введение                                                                                                                 3

Примерный перечень тем                                                                                      5             

Содержание и объем курсовой работы                                                                6  

Листинг программы                                                                                              10

Список литературы                                                                                               12                                                                   

Свод.план 2009 г. поз.