Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения (Развитие методологии объектно-ориентированного программирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 457

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Рисунок 5 – Главное окно приложения

В случае попытки подбора вклада или расчета доходности с полем ФИО, которое является пустой либо состоящей только из пробелов строкой, программа выдаст сообщение об ошибке, как показано на рисунке 6.

Основные алгоритмы для расчета описаны в пункте 1 подраздела 3.2 и реализованы в переопределенном методе GetOverall классов-наследников (листинги 6 – 8). Полный исходный код модулей программы с подробными комментариями приведен в приложении 1.

Листинг 6. Метод вычисления доходности по вкладу с ежегодным начислением процентов

public override double GetOverall()

{

double r = Rate / 100;

return Math.Round(Sum * Math.Pow(1 + r, Years), 2);

}

Рисунок 6 – Сообщение об ошибке при вводе пустой строки для хранения ФИО вкладчика

Листинг 7. Метод вычисления доходности по вкладу с ежемесячным начислением процентов

public override double GetOverall()

{

double r = Rate / 100;

double monthRate = r / 12;

double months = Years * 12;

return Math.Round(Sum * Math.Pow(1 + monthRate, months), 2);

}

Листинг 8. Метод вычисления доходности по вкладу с ежедневным начислением процентов

public override double GetOverall()

{

double r = Rate / 100;

double dayRate = r / 365;

int days = Years * 365;

return Math.Round(Sum * Math.Pow(1 + dayRate, days), 2);

}

Программные модули с исходным кодом классов DepositYear, DepositMonth и DepositDay соответственно описаны в файлах DepositYear.cs, DepositMonth.cs и DepositDay.cs. Исходный код базового (абстрактного) класса Deposit расположен в файле Deposit.cs. Файл Form1.cs описывает код формы приложения, реализующей графический пользовательский интерфейс.

3.5 Тестирование программы

Результатом тестирования приложения является набор тестов, на которых была проверена работа спроектированной программы, в виде входных текстов, предъявленных программе, и текстов ее ответных реакций [7.]. Существует несколько стратегий тестирования, в том числе «тестирование черного ящика» (приложение рассматривается как черный ящик). Целью здесь ставится выяснение обстоятельств, в которых поведение приложения не соответствует спецификации. Для обнаружения всех ошибок в приложении необходимо выполнить тестирование на всевозможных наборах данных [9.]. Для большинства приложений такое невозможно, поэтому применяют ручное тестирование, при котором тестирование программы ограничивается небольшим подмножеством всевозможных наборов данных. Объем этих данных должен быть достаточным для демонстрации всех функций разработанной программы с учетом проверок и обработки исключительных ситуаций. При этом необходимо выбирать наиболее подходящие подмножества, то есть подмножества с наивысшей вероятностью обнаружения ошибок (контрольный пример) [6.].


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

На рисунке 7 проиллюстрирован результат работы приложения, в котором осуществляется ввод данных для открытия и для подбора вклада. По результатам выполнения соответствующих действий необходимые выходные данные записываются в текстовое поле с меткой «Информация». Проведенные отладка и тестирование подтверждают корректность работы разработанного программного приложения.

Рисунок 7 – Результат работы приложения

ЗАКЛЮЧЕНИЕ

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

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

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


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

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

Во второй главе работы был выполнен краткий обзор языков программирования C++ и Objective-C, изучены основные принципы реализации ООП в этих языках. Оба языка программирования появились в 1983-м году; они опирались на структурную парадигму программирования, но взяли за основу объектно-ориентированный подход прежде всего с целью избавиться от повторного использования ранее написанного кода. Также были рассмотрены плюсы и минусы каждого из языков, выделены основные различия в реализации ООП.

В третьей главе работы для демонстрации применения объектно-ориентированной методологии с целью создания прикладной программы в качестве инструмента был выбран язык программирования C# со средой разработки Visual Studio 2017, обеспечивающей быструю многоуровневую разработку, свободно распространяемой для учебных проектов и обладающей хорошей документацией. В процессе разработки прикладного приложения «Калькулятор вкладов» самостоятельно были изучены функции и возможности объектно-ориентированного языка программирования C#. Разработка программного средства поспособствовала систематизации, закреплению и расширению знаний, полученных при изучении. Закрепление теоретического материала происходило в ходе решения поставленной задачи – проектирования классов, перевода основных методов на машинный язык и исправления появившихся во время решения ошибок. Завершением курсовой работы явилось написание пояснительной записки, при выполнении которой также были закреплены основные знания по написанию отчетов в соответствии с методическими рекомендациями. Созданная программа имеет понятный графический интерфейс, выводит все необходимые пояснения и подсказки, является законченной и удобной для использования.


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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Abott, R. Program Design by Informal English Descriptions, CACM, 1993, Vol. 26 No. 11, pp. 892 - 894.
  2. Biddle, R. L., Tempero, E. D., Teaching C++ Experience at Victoria University of Wellington, 1994, In Proceedings of Software Education Conference, Dunedin, New Zealand, pp. 274 - 281.
  3. Champeaux, D. D., Panel: Structured Analysis and Object-Oriented Analysis, ECOOP/OOPSLA ’90 Proceedings, pp. 135 - 139.
  4. Deitel, P. J., Deitel, H. M., Java How To Program, USA, Pearson Inc., 7th Ed., 2007, pp. 421 - 423.
  5. Hubbard, J. R., Programming with C++ Schaum’s Outlines, New York, 2005, McGraw-Hill Companies, Inc., pp. 273 – 299
  6. Istatkova, G. Algebra of Algorithms in Procedural and Object-Oriented, structured Programming, Automatica & Informatics, 2001, Vol.3, No. 4, pp. 56 - 62.
  7. Louden, K. C., Programming Languages: Principles and Practice, Boston, 1993, PWS Publishing Company, pp. 300 - 345.
  8. Owolabi, O., Ndeekor, C. B. Structured Programming with Pascal, Aba, 2005, Granite Ventures Nig. Ltd, pp. 19 - 21.
  9. Pressman, R. S., Software Engineering: A Practitioner’s Approach, New York, 2005, McGrawHill International 6th Ed., pp. 217 - 218.
  10. Страуструп Б. Язык программирования C++: специальное издание / Б. Страуструп; пер.: С. Анисимов, М. Кононов; ред.: Ф. Андреев, А. Ушаков. - [Б. м.]: Бином-Пресс, 2008. - 1098 с.
  11. Advantages and Disadvantages of C++ [Электронный ресурс] / Режим доступа: https://data-flair.training/blogs/advantages-and-disadvantages-of-cpp/ (дата обращения: 17.10.2020)
  12. Objective-C [Электронный ресурс] / Режим доступа: http://www.fact-index.com/o/ob/objective_c.html (дата обращения: 15.10.2020)

Приложение 1. Исходные коды программ

Листинг А1. Исходный код модуля Deposit.cs

using System;

namespace DepositProject

{

/// <summary>

/// Абстрактный класс Вклад с возможностью сравнения

/// </summary>

abstract class Deposit : IComparable

{

protected string name;

protected int years;

protected double sum;

protected double rate;

/// <summary>

/// Минимальная вносимая на вклад сумма

/// </summary>

public static readonly int MIN_SUM = 50000;

/// <summary>

/// Минимальное число лет для хранения вклада

/// </summary>

public static readonly int MIN_YEARS = 1;

/// <summary>

/// Свойство для хранения ФИО

/// </summary>

public string Name

{

get { return name; }

set { name = string.IsNullOrWhiteSpace(value) ? "John Doe" : value; }

}

/// <summary>

/// Свойство для хранения и изменения количества лет для хранения вклада

/// </summary>

public int Years

{

get { return years; }

set { years = value < MIN_YEARS ? MIN_YEARS : value; }

}

/// <summary>

/// Свойство для хранения и изменения суммы вклада


/// </summary>

public double Sum

{

get { return sum; }

set { sum = value < MIN_SUM ? MIN_SUM : value; }

}

/// <summary>

/// Свойство для хранения процентной ставки вклада

/// </summary>

public double Rate

{

get { return rate; }

set { rate = value < 1.0 ? 1.0 : value; }

}

/// <summary>

/// Конструктор по умолчанию

/// </summary>

public Deposit()

{

name = "John Doe";

years = 1;

sum = 50000;

Rate = 1.0;

}

/// <summary>

/// Конструктор с параметрами

/// </summary>

/// <param name="nm"></param>

public Deposit(string t, int d, double s)

{

name = string.IsNullOrWhiteSpace(t) ? "John Doe" : t;

years = d < MIN_YEARS ? MIN_YEARS : d;

sum = s < MIN_SUM ? MIN_SUM : s;

Rate = 1.0;

}

/// <summary>

/// Конструктор копирования

/// </summary>

/// <param name="st"></param>

public Deposit(Deposit dep)

{

name = dep.name;

years = dep.years;

sum = dep.sum;

Rate = dep.Rate;

}

/// <summary>

/// Деструктор

/// </summary>

~Deposit()

{

Console.Write("Вклад удален!");

}

/// <summary>

/// Метод сравнения текущего вклада с переданным в качестве параметра

/// </summary>

/// <param name="obj">вклад для сравнения</param>

/// <returns>0, если равны; -1, если второй вклад лучше; 1 в противном случае</returns>

public int CompareTo(object obj)

{

if (obj is Deposit)

{

Deposit st = obj as Deposit;

double o1 = GetOverall(),

o2 = st.GetOverall();

return o1.CompareTo(o2); // вклады сравниваются по общему доходу

}

throw new Exception("Переданный для сравнения объект не является вкладом!");

}

/// <summary>

/// Переопределенный метод вывода информации о вкладе в виде строки

/// </summary>

/// <returns></returns>

public override string ToString()

{

return string.Format("{0}, вам одобрен вклад на {1} лет с суммой {2} рублей и процентной ставкой {3}.\n",

name, years, sum, Rate);

}

/// <summary>

/// Метод хэш-функции для реализации сравнения

/// </summary>

/// <returns></returns>

public override int GetHashCode()

{

return name.GetHashCode() + Rate.GetHashCode() +

sum.GetHashCode() + years.GetHashCode();

}

/// <summary>

/// Виртуальный метод, возвращающий общую сумму вклада

/// </summary>

/// <returns></returns>

public virtual double GetOverall()

{

return sum;

}

}

}

Листинг А2. Исходный код модуля DepositYear.cs

using System;

namespace DepositProject

{

/// <summary>

/// Класс вклада с ежегодной капитализацией, наследник базового абстрактного класса Deposit

/// </summary>

class DepositYear : Deposit

{

public static new readonly int MIN_SUM = 100000;

public static new readonly int MIN_YEARS = 1;

public new double Rate { get; } = 4.7;

public DepositYear() : base() { rate = 4.7; }

public DepositYear(string t, int d, double s) : base(t, d, s) { }

public DepositYear(DepositYear dep) : base(dep) { }

~DepositYear()

{

Console.Write("{0}, вклад с ежегодной капитализацией удален!", Name);

}

public override string ToString()