Проектирование программного продукта Объектно-ориентированное программирование (2016-2016 у.г.) Курсовая работа Общая постановка задания Разработать классы-объекты (предок и потомок) согласно варианту задания. В каждом варианте продумать и построить иерархию классов (возможно использование абстрактного класса - фигура). Все поля должны быть скрытыми. Для возврата их значений реализовать функции-селекторы ( где это необходимо), для изменения значений - функции-модификаторы (где это необходимо). Реализовать конструктор по умолчанию. Конструктор должен вывести сообщение о создании экземпляра. Реализовать деструктор, в котором будет выводиться сообщение об уничтожении экземпляра. Реализовать метод вывода информации об объекте. Написать главную программу, которая демонстрирует использование всех объектов. Варианты заданий 1. Создать класс квадрат, поля класса – длина стороны. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – диагональ, периметр, площадь. Создать производный класс – правильная квадратная призма с высотой H, добавить в класс метод определения объема фигуры, перегрузить (или переопределить) методы расчета площади и вывода сведений о фигуре. Написать программу, демонстрирующую работу с этими классами. Дано Х призм, найти призму с максимальной диагональю. 2. Создать класс треугольник, поля класса – длины 3-х сторон. Предусмотреть в классе методы проверки существования треугольника, вычисления и вывода сведений о фигуре – длины сторон, углы, периметр, площадь. Создать производный класс – равносторонний треугольник, перегрузить (или переопределить) в классе проверку, является ли треугольник равносторонним и метод вывода сведений о фигуре. Написать программу, демонстрирующую работу с классами. Дано N треугольников, найти среднюю площадь для треугольников. 3. Создать класс окружность, поле класса – радиус R. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – площади, длины окружности. Создать производный класс – круглый прямой цилиндр с высотой h, добавить в класс метод определения объема фигуры, перегрузить (или переопределить) методы расчета площади и вывода сведений о фигуре. Написать программу, демонстрирующую работу с классами. Дано К цилиндров, найти средний объем цилиндров. 4. Создать класс квадрат, поле класса – длина стороны. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – диагоналей, периметр, площадь. Создать производный класс – правильная пирамида с апофемой h, добавить в класс метод определения объема фигуры, перегрузить (или переопределить) методы расчета площади и вывода сведений о фигуре. Написать программу, демонстрирующую работу с классами. Дано М пирамид, найти количество пирамид с высотой более числа a (a вводить). 5. Создать класс четырехугольник, поле класса – координаты 4-х точек. Предусмотреть в классе методы проверки существования четырехугольника вычисления и вывода сведений о фигуре – длины сторон, диагоналей, периметр, площадь. Создать производный класс – параллелограмм, предусмотреть в классе проверку, является ли фигура параллелограммом. Написать программу, демонстрирующую работу с классами. Дано К четырехугольников, найти параллелограммы наименьшей и наибольшей площади. 6. Создать класс треугольник, поля класса – координаты 3-х точек. Предусмотреть в классе методы проверки существования треугольника, вычисления и вывода сведений о фигуре – длины сторон, углы, периметр, медианы, площадь. Создать производный класс – равносторонний треугольник, предусмотреть в классе проверку, является ли треугольник равносторонним. Написать программу, демонстрирующую работу с классами. Дано С треугольников, определить треугольник с наименьшей медианой. 7. Создать класс прямоугольник, поля класса – длины сторон a и b. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – длины сторон, диагоналей, периметр, площадь. Создать производный класс – параллелепипед с высотой с, добавить в класс метод определения объема фигуры, перегрузить (или переопределить) методы расчета площади и вывода сведений о фигуре. Написать программу, демонстрирующую работу с классами. Дано М параллелепипедов, найти количество прямоугольников, у которых площадь больше средней площади прямоугольников 8. Создать класс окружность, поле класса – радиус R. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – площади, длины окружности. Создать производный класс – конус с высотой h, добавить в класс метод определения объема фигуры, перегрузить (или переопределить) методы расчета площади и вывода сведений о фигуре. Написать программу, демонстрирующую работу с классами. Дано К конусов, найти наибольший по объему конус. 9. Создать класс четырехугольник, поля класса – координаты 4-х точек. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – длины сторон, диагоналей, периметр, площадь. Создать производный класс – равнобочная трапеция, предусмотреть в классе проверку, является ли фигура равнобочной трапецией. Написать программу, демонстрирующую работу с классами. Дано К трапеций, найти трапецию с наименьшей диагональю. 10. Создать класс равносторонний треугольник, поле класса – длина стороны. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – периметр, площадь. Создать производный класс – правильная треугольная призма с высотой H, добавить в класс метод определения объема фигуры, перегрузить (или переопределить) методы расчета площади и вывода сведений о фигуре. Написать программу, демонстрирующую работу с классами. Дано К треугольников и Х призм. Найти количество треугольников, у которых площадь меньше средней площади треугольников, и призму с наибольшим объемом. 11. Создать класс треугольник, поля класса – длины 3-х сторон. Предусмотреть в классе методы проверки существования треугольника, вычисления и вывода сведений о фигуре – длины сторон, углы, периметр, площадь. Создать производный класс – прямоугольный треугольник, предусмотреть в классе проверку, является ли треугольник прямоугольным. Написать программу, демонстрирующую работу с классами: дано Х треугольников и М прямоугольных треугольника, найти треугольник с максимальной площадью и прямоугольный треугольник с наименьшей гипотенузой. 12. Создать класс четырехугольник, поля класса – координаты 4-х точек. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – длины сторон, диагоналей, периметр, площадь. Создать производный класс – квадрат, предусмотреть в классе проверку, является ли фигура квадратом. Написать программу, демонстрирующую работу с классами. Дано Р четырехугольников и М квадратов, найти четырехугольник с минимальным периметром и с максимальной площадью квадрат. 13. Создать класс треугольник, поля класса – длины 3-х сторон. Предусмотреть в классе методы проверки существования треугольника, вычисления и вывода сведений о фигуре – длины сторон, углы, периметр, площадь. Создать производный класс – равнобедренный треугольник, предусмотреть в классе проверку, является ли треугольник равнобедренным. Написать программу, демонстрирующую работу с классами. Дано 3 треугольника и 3 равнобедренных треугольника, найти среднюю площадь для треугольников и равнобедренный треугольник с наименьшей площадью. 14. Создать класс квадрат, поле класса – длина стороны. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – периметр, площадь, диагональ. Создать производный класс – куб, добавить в класс метод определения объема фигуры, перегрузить (или переопределить) методы расчета площади и вывода сведений о фигуре. Написать программу, демонстрирующую работу с классами. Дано N1 квадратов и N2 кубов. Найти среднюю площадь квадратов и количество кубов с наибольшей площадью. 15. Создать класс четырехугольник, поля класса – координаты 4-х точек. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – длины сторон, диагоналей, периметр, площадь. Создать производный класс – ромб, предусмотреть в классе проверку, является ли фигура ромбом. Написать программу, демонстрирующую работу с этими классами. Дано 3 четырехугольника и 3 ромба, найти четырехугольник с минимальным периметром и среднюю площадь ромбов. 16. Создать класс треугольник, члены класса – длины 3-х сторон. Предусмотреть в классе методы проверки существования треугольника, вычисления и вывода сведений о фигуре – длины сторон, углы, периметр, площадь. Создать производный класс – прямоугольный треугольник, предусмотреть в классе проверку, является ли треугольник прямоугольным. Написать программу, демонстрирующую работу с классами. Дано 3 треугольника и 2 прямоугольных треугольника, найти среднюю площадь треугольников и прямоугольный треугольник с наибольшей гипотенузой. 17. Создать класс четырехугольник, поля класса – координаты 4-х точек. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – длины сторон, диагоналей, периметр, площадь. Создать производный класс – трапеция, предусмотреть в классе проверку, является ли фигура трапецией. Написать программу, демонстрирующую работу с классами. Дано К четырехугольников и 2 трапеции, найти четырехугольник с минимальной площадью и трапецию с максимальной средней линией. 18.Создать класс квадрат, член класса – длина стороны. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – диагональ, периметр, площадь. Создать производный класс – правильная пирамида с апофемой А, добавить в класс метод определения объема фигуры, перегрузить (или переопределить) методы расчета площади и вывода сведений о фигуре. Написать программу, демонстрирующую работу с этими классами. Дано 2 квадрата и 3 пирамиды, найти среднюю площадь квадратов и пирамиду с минимальной площадью. 19.Создать класс четырехугольник, поля класса – координаты 4-х точек. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – длины сторон, диагоналей, периметр, площадь. Создать производный класс – прямоугольник, предусмотреть в классе проверку, является ли фигура прямоугольником. Написать программу, демонстрирующую работу с классами. Дано 2 четырехугольника и 2 прямоугольника, найти среднюю площадь четырехугольников, и среднюю площадь прямоугольников. 20. Создать класс равносторонний треугольник, поля класса – длина стороны. Предусмотреть в классе методы вычисления и вывода сведений о фигуре – высота, биссектриса, периметр, площадь. Создать производный класс – тетраэдр, добавить в класс метод определения объема фигуры, перегрузить (или переопределить) методы расчета площади и вывода сведений о фигуре. Написать программу, демонстрирующую работу с классами. Дано 2 треугольника и 3 пирамиды, найти среднюю площадь треугольников, и тетраэдр с наименьшим объемом. СОСТАВ И СТРУКТУРА КУРСОВОЙ РАБОТЫ Результаты выполнения курсовой работы оформляются каждым студентом в виде пояснительной записки, содержащей следующие материалы: - титульный лист типовой формы ; - содержание; - введение; - основная часть; - заключение; - список литературы; - приложения. Введение пояснительной записки должно содержать цель и назначение курсовой работы. Основная часть пояснительной записки должна включать следующие разделы: 1. Постановка задачи Данный раздел составляется на основании индивидуального задания на курсовую работу 2. Разработка общей последовательности решения задачи В данном разделе приводится общий алгоритм, выполненный в виде блок-схемы и который отражает последовательность решения задачи, связь между отдельными частями задачи (ввод данных, вывод результатов или промежуточных данных, обработка, использование файлов и т.д.), возможность выбора очередного шага решения задачи и т.д. По сути дела этот алгоритм отражает действия меню и является основанием для его реализации. 3. Описание общей структуры программы Решение всей поставленной задачи является достаточно громоздким , в связи с чем возникнет необходимость использовать несколько программных файлов. Автору работы предоставляется возможность самому выбрать их количество и соответственно разбить общую задачу на отдельные части, реализация которых размещается в различных файлах. Кроме этого, для хранения исходной и конечной информации необходимо организовать файлы данных. Их количество также может быть различным и зависит от условия задачи и возможностей автора. В данном разделе требуется описать назначение каждого из файлов и указать их имена. 4. Описание логической структуры программы Описание программы решения задачи, должно содержать сведения, достаточные для ее практического использования и иметь примерно следующее содержание: - Описание структуры класса, с указанием закрытых, открытых членов, дружественности или наследования, в зависимости от условия индивидуального задания; - Описание назначения методов согласно их прототипам, указанным в структуре класса. - Описание каждого метода с указанием передаваемых аргументов, если таковые присутствуют в заголовке метода. Если метод реализует, какую-либо логическую задачу, выполняет обработку данных, привести блок-схему алгоритма, согласно которому выполняется обработка. - В случае использования дружественности, переопределения операций и т.д. указать передаваемые аргументы методов, обосновать их необходимость, объяснить их тип. 5. Входные данные описываются следующим образом: тип данных; краткое описание; способ формирования 6. Проверка программы на контрольном примере и анализ результатов. В данном разделе необходимо привести описание контрольного примера, определив исходные данные. Исходные данные для контрольного примера должны быть подобраны таким образом, чтобы все логические ветви программы были бы протестированы. Заключение (краткие выводы студента по курсовой работе) должно содержать: - оценку эффективности используемого метода решения или задачи предложенных нестандартных приемов; - обобщение полученных результатов; - выводы и предложения по совершенствованию проекта (а также по содержания и организации курсового проектирования). В приложениях содержатся тексты программы, результаты решения задачи, сложный графический материал, если таковой имеется. Примерное содержание курсовой работы Введение (основные задачи курсовой работы, методология ООП) Постановка задачи 2. Анализ предметной области (исследование предметной области, математическая модель задачи, выбор объектов, задание необходимых свойств для каждого объекта, выявление связей между объектами...) Проектирование программного продукта 3.1 Объектная модель предметной области задачи (диаграмма классов) 3.2. Разработка структурной схемы программного продукта (разработка общей последовательности решения задачи, (диаграмма последовательности), разработка интерфейса программы, описание общей структуры программы, проектирование структуры и выбор компонентов программного продукта...) 4. Программная реализация проекта (выбор среды программирования, описание логической структуры программы, реализация основных алгоритмов программного продукта, методов классов...) 5. Отладка и тестирование (проверка программы на контрольном примере и анализ результатов). Заключение Список литературы Приложения Пример программы (наследование в классах) unit Unit1; interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: Tbutton; //кнопка Расчет //массивы x1, y1 – координаты вершин //1-го треугольника частный случай) //массивы x1, y1 – координаты вершин //2-го треугольника (равностороннего) Edit1: Tedit; //для ввода координаты x1[1] Edit10: TEdit; //для ввода координаты y2[2] Edit11: TEdit; //для ввода координаты x2[3] Edit12: TEdit; //для ввода координаты y2[3] Edit2: TEdit; //для ввода координаты y1[1] Edit3: TEdit; //для ввода координаты x2[2] Edit4: TEdit; //для ввода координаты y1[2] Edit5: TEdit; //для ввода координаты x1[3] Edit6: TEdit; //для ввода координаты y1[3] Edit7: TEdit; //для ввода координаты x2[1] Edit8: TEdit; //для ввода координаты y2[1] Edit9: TEdit; //для ввода координаты x2[2] Label..16: TLabel; end; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; //Объявление базового класса «треугольник». type TTriangle=class Private //Массивы, в которых хранятся координаты //вершин треугольника. x, y:array[0..2] of real; Public constructor Create;//конструктор procedure Set_Tr(a,b:array of real); //Методы вычисления сторон треугольника. function a():real; function b():real; function c():real; //Виртуальный метод проверки существования треугольника, который будет перегруженв производном классе. function Proverka():boolean; virtual; //Метод вычисления периметра. function Perimetr():real; //Метод вычисления площади. function Square():real; //Виртуальный метод формирования сведений о треугольнике. function Show():string; virtual; end; //Объявление производного класса «равносторонний треугольник». type R_TTriangle=class(TTriangle) public //Перегружаемые методы проверки, что треугольник является равносторонним,и формирования сведений о треугольнике. function Proverka():boolean; override; function Show():string; override; end; var Form1: TForm1; //Объявление переменной типа класс «треугольник». Figura1: Ttriangle; //Объявление переменной типа класс «равносторонний треугольник». Figura2: R_TTriangle; implementation //Конструктор, который обнуляет //массивы координат. constructor TTriangle.Create; var i:integer; begin for i:=0 to 2 do begin x[i]:=0; y[i]:=0; end; end; //Метод получения координат вершин. procedure TTriangle.Set_Tr(a,b:array of real); var i:integer; begin for i:=0 to 2 do begin x[i]:=a[i]; y[i]:=b[i]; end; end; //Методы вычисления сторон треугольника a, b, c function TTriangle.a():real; begin a:=sqrt(sqr(x[1]-x[0])+sqr(y[1]-y[0])); end; function TTriangle.b():real; begin b:=sqrt(sqr(x[2]-x[1])+sqr(y[2]-y[1])); end; function TTriangle.c():real; begin c:=sqrt(sqr(x[0]-x[2])+sqr(y[0]-y[2])); end; //Методы вычисления периметра треугольника. function TTriangle.Perimetr():real; begin Perimetr:=a()+b()+c(); end; //Функции вычисления площади треугольника. function TTriangle.Square():real; var p:real; begin p:=Perimetr()/2; //полупериметр Squire:=sqrt((p-a())*(p-b())*(p-c())); end; //Метод проверки существования треугольника: //если в уравнение прямой, проходящей через //две точки, подставить координаты 3-й точки //и при этом получится равенство, значит, три //точки лежат на одной прямой и построение //треугольника невозможно. function TTriangle.Proverka():boolean; begin if (x[0]-x[1])/(x[0]-x[2])= (y[0]-y[1])/(y[0]-y[2]) then Proverka:=false else Proverka:=true end; //Метод формирования строки – //сведений о треугольнике. function TTriangle.Show():string; begin //Если треугольник существует, //то формируем строку сведений о треугольнике. if Proverka() then Show:='Tr'+chr(13)+'a='+ FloatToStrF(a(),ffFixed,5,2)+ chr(13)+'b='+FloatToStrF(b(),ffFixed,5,2)+ chr(13)+'c='+FloatToStrF(c(),ffFixed,5,2)+ chr(13)+'P='+FloatToStrF(Perimetr(),ffFixed,5,2)+ chr(13)+'S='+FloatToStrF(Square(),ffFixed,5,2) else Show:='Not Triangle'; end; //Метод проверки существования //равностороннего треугольника. function R_TTriangle.Proverka():boolean; begin if (a()=b()) and(b()=c()) then Proverka:=true else Proverka:=false end; //Метод формирования сведений //о равностороннем треугольнике. function R_TTriangle.Show():string; begin //Если треугольник равносторонний, //то формируем строку сведений. if Proverka()=true then Show:='Tr'+chr(13)+'a='+ FloatToStrF(a(),ffFixed,5,2)+ chr(13)+'P='+ FloatToStrF(Perimetr(),ffFixed,5,2)+chr(13) +'S='+FloatToStrF(Square(),ffFixed,5,2) else Show:='Not R_Triangle'; end; { TForm1 } procedure TForm1.Button1Click(Sender: Tobject); //Массивы x1, y1 – координаты треугольника. //Массивы x2, y2 – координаты //равностороннего треугольника var x1, y1, x2, y2 :array[1..3] of real; s:string; begin //Чтение координат треугольников //из полей ввода диалогового окна. x1[1]:=StrToFloat(Edit1.Text); y1[1]:=StrToFloat(Edit2.Text); x1[2]:=StrToFloat(Edit3.Text); y1[2]:=StrToFloat(Edit4.Text); x1[3]:=StrToFloat(Edit5.Text); y1[3]:=StrToFloat(Edit6.Text); x2[1]:=StrToFloat(Edit7.Text); y2[1]:=StrToFloat(Edit8.Text); x2[2]:=StrToFloat(Edit9.Text); y2[2]:=StrToFloat(Edit10.Text); x2[3]:=StrToFloat(Edit11.Text); y2[3]:=StrToFloat(Edit12.Text); //Инициализация объекта класса треугольник. Figura1:=TTriangle.Create; //Инициализация объекта класса //равносторонний треугольник. Figura2:=R_TTriangle.Create; Figura1.Set_Tr(x1,y1); Figura2.Set_Tr(x2,y2); //Вызов методов формирования //сведений и вывод строки на форму. s:=Figura1.Show(); Label15.Caption:= S; s:=Figura2.Show(); Label16.Caption:= S; //уничтожение объектов Figura1.Free; Figura2.Free; end; end. |