Читать книгу «Основы программирования с Java» онлайн полностью📖 — Тимура Машнина — MyBook.
image

Пример

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

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

Давайте посмотрим на начальный проект программы, которая уже была написана для вас (CourseGrade, https://github.com/novts/java-base).


Программа начинается, следуя такому же формату, который мы видели в нашей первой программе Java.

В этом случае, название программы (в Java это называется класс) является CourseGrade.

Далее идет выражение, которое определяет главную точку входа для программы.

Это выражение точно такое же, как то, которое мы использовали для HelloWorld.

Это похоже на написание формального письма, которое начинается с фирменного бланка.

Первая часть программы здесь является определением или объявлением переменных.

И я вернусь к этой теме позже.

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

Порядок определения здесь не имеет значения.

Так как мы решили, что веса должны быть предопределены, мы также определяем эти имена в первую очередь.

Имена examScore, labScore и hwScore соответствуют входным данным, в то время как finalgrade представляет желаемый результат.

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

Я должен отметить, что существует также краткое описание цели программы в самом начале.

Это комментарии, которые следуют определенному формату.

Я вернусь к комментариям программ позже.

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

Вы должны также заметить, что различные участки кода идут с отступом. Это поможет улучшить читаемость программы.

И обратите внимание, что блок операторов в шаге «Ask student to input scores for exam, lab and homework» будет предлагать пользователю ввести оценки экзамена, лабораторной и домашних заданий с помощью объявления IO – IO.output и IO.inputDouble.

И существует еще одно объявление IO.outputln на шаге «Output the final grade».

Я вернусь к этим объявлениям IO, когда мы будем обсуждать простой ввод-вывод IO позже.

Следующим шагом после реализации решения, это придумать план тестирования для этой реализации.

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

Вопросы

Задача

Как уже говорилось, важно придумать план тестирования, чтобы проверить, работает ли программа как ожидалось. В примере CourseGrade, вы можете протестировать программу на разных входных значениях для examScore, labScore и hwScore.

Учитывая только examScore, попробуйте придумать план тестирования из 5 осмысленно различных тестов, при условии, что диапазон фактических баллов составляет от 0 до 100.

Ответ:

1. Минимальное значение диапазона 0.

2. Максимальное значение диапазона 100.

3. За минимальной границей -1.

4. За максимальной границей 100.

5. В диапазоне 50.

Такой метод тестирования называется тестированием границ.

Идентификаторы

Как вы видели в предыдущих примерах, такие имена, как HelloWorld и CourseGrade были использованы в качестве имен для классов (или программ), а имена examWeight, examScore, labScroe и т.д. были определены в программе CourseGrade.

Эти имена называются идентификаторами.

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

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

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

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

Именование идентификаторов должно следовать определенным правилам в Java.



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

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

Давайте рассмотрим несколько примеров.



Раньше вы видели, что examWeight и examScore были использованы в предыдущей программе, и они являются допустимыми идентификаторами. Вы также видели слова int и double.

Это типы этого идентификатора.

Давайте проигнорируем их пока.

Вы также можете добавить подчеркивания между словами, например, exam_score и perfect_score_10, но пробел не может быть включен в качестве части идентификатора, так что " perfect score 10" с пространством между словами не является допустимым идентификатором.

Если вы хотите отделить два слова в качестве идентификатора, следует использовать подчеркивания.

И не путайте подчеркивания "_" с дефисом "-", дефис "-" не может быть использован в качестве идентификатора, так как это можно было бы интерпретировать как минус.

2017y является недействительным идентификатором, потому что он начинается с цифры.

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

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

Давайте посмотрим на то, что является зарезервированным словом. Не трудно найти зарезервированные слова в нашей повседневной жизни.

Для названий доменов в Интернете, .gov зарезервирован для государственных организаций, .edu зарезервирован для учебных заведений. Точно так же, и Java использует некоторые зарезервированные слова.

В таблице здесь показаны некоторые из зарезервированных слов Java.



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

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

Вот некоторые правила для названий идентификаторов Java.

Важно, чтобы использовались значимые имена. Использование бессмысленных названий, таких как х, у, г следует заменить более значимыми именами, такими как radius, area, score если это возможно. Для длинных имен, полезно использовать смешанный регистр, то есть, смесь нижнего регистра и заглавных букв, разделяя слова, используя заглавные буквы.

Эти заглавные буквы обычно называются CamelCase, как горбы верблюдов. И есть два типа CamelCase, нижний верблюд начинается со строчной буквы, например, examScore и areaOfCircle. Нижний CamelCase обычно используется в Java для переменных и методов.

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

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

Вот еще один пример объявления для класса BankAccount.

Мы обсудим подробнее позже, что означают методы и классы.

Вопросы

Задача

Просьба указать допустимый идентификатор Java из списка ниже.

1. Last_Name

2. 1dentifier

3. You&Me

4. COMP-102

Ответ: 1

Переменные

Один вид идентификатора, который очень часто используется в программе является переменной.

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

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

Как правило, такая память выделяется для переменной по запросу программой.

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

Например, в программе расчета оценки, переменные examScore, labScore и hwScore могут принимать различные значения в зависимости от входных данных.

Идентификатор finalgrade также является переменной.

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

Имя переменной это метка участка памяти.

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

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

Переменная создается через процесс объявления.

Цель объявления, это сделать понятным для компьютера, что имя конкретного идентификатора означает в программе.

Объявление переменной в программе состоит из трех основных частей:

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


Так что с помощью этого синтаксиса объявляется переменная.

Например, в программе CourseGrade, было сделано объявление переменной int examWeight; где int является целочисленным типом данных, examWeight является идентификатором и объявление заканчивается точкой с запятой.

Если вы обратитесь к программе расчета оценки, объявление int examWeight не просто заканчивается сразу после examWeight, но за ним следует "= 70".

В объявлении int examweight = 70, examweight объявляется и инициализируется в одном определении.

Объявление и инициализация также могут быть сделаны отдельно.

В любом случае это приведет к тому же эффекту.

Знак равенства, который вы видите здесь это оператор присваивания, в данном случае, examweight = 70 является утверждением присваивания.

Также вы можете увидеть, что, если программа ссылается на examWeight до инициализации, это приведет к ошибке компиляции.

Хотя Java инициализирует определенные переменные, я поговорю об этом подробнее, когда будем обсуждать классы и объекты, тем не менее это всегда хорошая практика программирования – инициализировать переменную перед ее использованием.

После объявления переменной и инициализации, ее значение может быть изменено с помощью оператора присваивания.



Старое значение, в данном случае, 70 будет удалено и заменено новым значением 50.

Также можно получить значение переменной, ссылаясь на ее имя.



В этом примере со ссылкой на examweight, в правой стороне от знака равенства, значение examweight извлекается, и значение затем присваивается labweight и результат будет храниться в ячейке памяти, выделенной для labWeight.

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

В программе CourseGrade, переменные examWeight, labWeight, hwWeight можно рассматривать как константы.

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

И вы можете назначить значение для финальной переменной только один раз.

В примере, который мы видели, объявление int examWeight = 70 объявляет и инициализирует examWeight.

Если мы добавим ключевое слово final перед декларацией, эффект проявится в виде блокировки памяти, и значение не может быть изменено снова.

Попытка повторно присвоить значение финальной переменной вызовет ошибку компиляции.



Например, если examWeight была объявлена как финальная, компилятор будет жаловаться при попытке изменить значение examWeight на 50.

Типы данных

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

Java является строго типизированным языком программирования.

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

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

Мы использовали тип int для целого числа в предыдущих примерах.

Другие типы данных также поддерживаются Java.

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

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







1
...
...
9