Thursday, October 6, 2022

Методика разработки

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

Этап №1: постановка задачи

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

Этап №2: анализ задачи

Анализ задачи включает в себя определение:

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

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

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

Вычислите и отобразите общую стоимость яблок в рублях, если известна масса яблок в килограммах и стоимость яблок в рублях за килограмм.

Затем обобщите информацию, содержащуюся в подчеркнутых фразах:

Входные данные задачи:

  •  масса яблок (в кг);
  •  стоимость яблок (в руб. за 1 кг).

Выходные данные задачи:

  •  общая стоимость яблок (в руб.).

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

общая стоимость = стоимость единицы измерения × количество единиц

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

Подстановка входных и выходных данных под нашу конкретную задачу дает формулу

общая стоимость яблок в руб. = стоимость яблок в руб. за 1 кг × масса яблок в кг

В некоторых ситуациях для получения этих взаимосвязей может потребоваться сделать определенные допущения или упрощения. Этот процесс моделирования задачи путем извлечения существенных переменных и их взаимосвязей называется абстракцией.

Этап №3: проектирование (разработка алгоритма)

Разработка алгоритма для решения задачи требует создания списка шагов, называемого алгоритмом для решения задачи, а затем — проверки того, что алгоритм действительно решает задачу. Алгоритмы могут быть написаны на естественных языках или в псевдокоде (естественный язык, смешанный с некоторым языком программирования). Написание алгоритма часто является самой сложной частью процесса решения задачи. Не пытайтесь сразу проработать решение до мелочей; вместо этого, приучайте себя использовать нисходящее проектирование. При нисходящем проектировании (также называемом «разделяй и властвуй») сначала перечисляются основные шаги или подзадачи, которые необходимо решить. Затем вы решаете исходную задачу, решая каждую из ее подзадач. Большинство компьютерных алгоритмов состоит по крайней мере из следующих подзадач.

Общий алгоритм для решения задачи программирования:

  1. Получить (от пользователя) данные.
  2. Выполнить вычисления.
  3. Отобразить результаты.

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

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

Алгоритм решения задачи с уточнением:

1. Получить (от пользователя) стоимость яблок в руб. за 1 кг и массу яблок в кг.

2. Вычислить общую стоимость яблок в руб.

    2.1. Общая стоимость яблок в руб. = стоимость яблок в руб. за 1 кг × масса яблок в кг

3. Отобразить общую стоимость яблок в руб.

Этап №4: реализация алгоритма (кодирование)

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

Этап №5: тестирование программы

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


Этап №6: сопровождение и обновление программы

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




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

Постановка задачи

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

Анализ задачи

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

  • как считать радиус с клавиатуры;
  • как сохранить радиус в программе.

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

Вместо использования x и y в качестве имен переменных выберите более описательные имена: в данном случае radius для радиуса круга и area для площади круга. Чтобы сообщить компилятору о переменных radius и area, укажите их типы данных. Тип данных — это вид информации, хранящейся в переменной, будь то целое число, вещественное число или что-то еще. Это называется объявлением переменных.

Язык Java предоставляет простые типы данных для представления целых чисел, вещественных чисел, символов и логических значений. Все эти типы данных известны как примитивные (или фундаментальные) типы данных.

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

В Java для объявления переменной вещественного типа можно использовать ключевое слово double.

Таким образом, уже на этапе анализа задачи мы можем написать часть программы, объявив переменные radius и area типа double и составив соответствующую формулу.

Входные данные задачи:

double radius; // радиус круга

Выходные данные задачи:

double area; // площадь круга

Формула:

area = 3.14159 * radius * radius;

Проектирование

Учитывая входные и выходные данные, полученные на этапе анализа задачи, составим исходный алгоритм решения задачи:

  1. Получить радиус круга.
  2. Вычислить площадь круга.
  3. Отобразить площадь круга.

Добавим в исходный алгоритм в качестве уточнения шага №2 формулу, полученную на этапе анализа задачи.

Алгоритм решения задачи с уточнением:

1. Получить радиус круга.

2. Вычислить площадь круга.

    2.1. area = 3.14159 * radius * radius;

3. Отобразить площадь круга.

Кодирование и тестирование

Чтобы написать программу, необходимо перевести алгоритм в предложения на языке Java. Вы уже знаете, что каждая Java-программа начинается с определения класса, в котором за ключевым словом class следует имя класса. Если предположим, что в качестве имени класса выбрано ComputeArea, то скелет программы будет выглядеть следующим образом:

public class ComputeArea {
   // Подробности будут даны ниже
}

Как вам известно, каждая Java-программа должна иметь метод main(), с которого начинается ее выполнение. Помимо этого метода, добавим в программу полученные на этапах анализа и проектирования строчки с объявлением переменных и исходный алгоритм в виде комментариев. Скелет программы расширится и будет выглядеть следующим образом:

public class ComputeArea {
  public static void main(String[] args) {
    double radius; // радиус круга
    double area; // площадь круга

    // Получить радиус круга
  
    // Вычислить площадь круга
  
    // Отобразить площадь круга
  }
} 

В программе ComputeArea объявляются переменные radius и area. Зарезервированное слово double указывает, что radius и area являются вещественными числами, хранящимися в компьютере.

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

Второй шаг алгоритма заключается в вычислении площади круга с помощью присваивания результата выражения 3.14159 * radius * radius переменной area (см. формулу, полученную на этапе анализа задачи).

На третьем шаге алгоритма программа отобразит в консоли значение переменной area с помощью метода System.out.println().

Далее показана готовая программа, которую вы можете запустить.

Каждая переменная имеет имя, тип и значение. В строчке №3 объявляется, что в переменной radius может храниться значение типа double. Значение переменной не определено до тех пор, пока оно не будет ей присвоено. В строчке №7 переменной radius присваивается 20. Аналогично в строчке №4 объявляется переменная area, а в строчке №10 ей присваивается значение.

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

№ строчкиradiusarea
3  
4  
720 
10 1256.636

Символ плюса (+) имеет в Java два значения: одно — для сложения, а другое — для конкатенации (соединения) строк. Символ плюса (+) в строчках №13 -14 называется оператором конкатенации строк. Он соединяет две строки в одну. Если строка соединяется с числом, то число преобразуется в строку и конкатенируется с соединяемой строкой, поэтому символы плюсов (+) в строчках №13 -14 соединяют строки в более длинную строку, которая затем отображается в консоли. Строки и конкатенация строк более подробно будут рассмотрены в следующих разделах курса.

  • Внимание

    Недопустимо разрывать строку в исходном коде, поэтому следующее предложение приведет к синтаксической ошибке:

    System.out.println("У Лукоморья
    дуб зеленый");

    Чтобы исправить эту ошибку, разбейте строку на отдельные подстроки и используйте оператор конкатенации (+), чтобы соединить их:

    System.out.println("У Лукоморья " +
      "дуб зеленый");












No comments:

Post a Comment