И существует собственник для каждого отдельного экземпляра автомобиля, это может быть моя машина, или эти автомобили находятся в собственности других людей, и все эти экземпляры имеют некоторые различия, такие как цвет, количество пассажиров, которые могут поместиться, год выпуска, размер двигателя и т.д.
В объектно-ориентированной терминологии, это можно рассматривать как класс автомобилей.
При этом экземпляры индивидуальных автомобилей являются объектами и характеристики этих объектов, это их атрибуты или свойства, такие как цвет, количество пассажиров, год выпуска, размер двигателя и так далее.
Эти свойства часто называются полями объектов.
Объект также может демонстрировать определенное поведение или действия, которые он может выполнять, например, движение вперед, перемещение назад и поворот.
Эти действия называются методами в объектно-ориентированном программировании.
Обратите внимание, что здесь также может быть иерархия автомобилей, это легковые автомобили, вы могли бы также иметь фургоны, грузовики и внедорожники.
Позже, я представлю идею подкласса и суперкласса, где подкласс может наследовать свойства суперкласса.
Таким образом, вы можете видеть, что объекты являются фундаментальными строительными блоками объектно-ориентированных программ.
В объектно-ориентированных программах, программные объекты используются для моделирования объектов реального мира, которые имеют определенные состояния или атрибуты и поведения или действия.
Давайте теперь посмотрим на классы, объекты и методы в Java.
Мы видели, что класс описывает группу объектов с общими свойствами и поведением.
Например, мы можем определить класс автомобиля, который основывается на общей концепции транспортного средства, которое двигается на колесах и может перемещаться из одного места в другое.
Или мы можем определить класс "смартфонов", это мобильные электронные устройства, которые могут быть использованы для совершения телефонных звонков, веб-серфинга, воспроизведения музыки, отправки SMS и т.д.
Мы можем использовать ключевое слово class, чтобы определить класс в Java.
На самом деле, мы уже использовали ключевое слово class в нашей программе СourseGrade, и я уже упоминал ранее, что все программы Java, это классы.
Два выражения здесь объявляют два класса, один для автомобиля, а другой для смартфона, заметьте, что имена Car и SmartPhone являются Java идентификаторами.
Здесь используется верхний CamelCase по соглашению об именах для классов.
Цель определения класса заключается в разработке шаблона для создания объектов.
Т.е. класс это шаблон для создания объектов.
После того, как класс определен, мы можем создавать экземпляры или объекты в этом классе.
Понятия объект и экземпляр являются взаимозаменяемыми.
В предыдущем примере, в классе автомобилей, могут быть различные экземпляры (или объекты) автомобилей, которые могут принадлежать мне и другим людям.
В классе "смартфон", различные экземпляры могут быть созданы для каждого студента на этом курсе.
Аналогичным образом, если класс студентов определен, экземпляры студентов могут быть созданы для представления каждого студента в классе.
В Java, экземпляры или объекты создаются с помощью конструкторов и ключевого слова new.
Я вернусь к этому позже в лекции.
Как я уже говорил, класс выступает в качестве шаблона или плана для объекта.
Определение класса должно охватить две основные характеристики.
Первая характеристика это состояния или свойства объекта в классе, которые часто называют полями.
Для объекта автомобиля, поля могут включать имя его владельца и его цвет или местоположение.
Для смартфона, это его марка и модель, такие как iPhone 7 или Samsung Galaxy 5, могут быть сохранены в полях объекта.
2-я характеристика это поведение объекта.
И объекты демонстрируют свое поведение с помощью методов.
Методы являются операциями, которые могут быть выполнены, чтобы изменить состояние объекта.
Например, чтобы изменить положение автомобиля нужно двигаться вперед или назад, или перевести смартфон в спящий режим, или увеличить громкость.
Прежде чем обсуждать в деталях, как определить поля и методы в Java, давайте сначала посмотрим на простой пример.
Пример
Перед погружением в детальную структуру объектно-ориентированного программирования, я сначала покажу вам пример, чтобы дать вам некоторое представление о том, как объектно-ориентированное программирование может быть использовано для моделирования внутренних состояний и поведения объектов.
Некоторые термины, которые я собираюсь использовать здесь, могут быть для вас в новинку, но не беспокойтесь, мы разберем все из них подробно.
В первой строке программы импортируется класс IO, который мы уже обсуждали.
Далее следует блок комментариев, который начинается с / ** и заканчивается * /.
Это является форматом Javadoc.
Это дает краткое описание того, что программа должна делать.
И эта программа определяет класс объектов автомобиль, который может двигаться вперед, назад и поворачивать.
Есть также комментарии в других различных разделах программы.
Я вернусь к документированию программы позже.
Первая строка после комментария является фактическим объявлением класса с именем Car (автомобиль) с помощью ключевого слова class.
Вы видели ключевое слово class раньше, потому что все программы это Java классы.
Основная часть определения класса начинается с открытой фигурной скобки, и есть также закрытая фигурная скобка в конце программы.
Определение класса начинается с объявления переменных.
Они называются переменными экземпляра.
И эти переменные экземпляра могут быть использованы для моделирования внутренних состояний или атрибутов объектов в этом классе.
Я вернусь к различным типам переменных позже.
Первой объявляется переменная одометр целого типа, и она устанавливается в нуль.
Как вы знаете, одометр является инструментом, который записывает общее расстояние, пройденное транспортным средством.
Второе объявление определяет переменную с именем владельцем типа String.
String на самом деле класс, определенный в Java.
Он представляет строку символов или последовательность символов.
Мы будем использовать много строк в программах Java, и я буду говорить детально о строках позже.
Это объявление также инициализирует владельца как символьную строку "NoName" с NoName, заключенным в паре двойных кавычек. Обратите внимание, что оба объявления начинаются с ключевого слова private.
private является модификатором доступа.
Я вернусь к этому позже.
После объявление переменных экземпляра следует определение конструкторов.
Конструкторы используются для создания новых объектов в классе.
Здесь определены два конструктора.
Первый без параметров внутри пары скобок.
В то время как 2-й конструктор имеет один параметр с типом String.
В принципе, все, что 2-й конструктор делает, это присваивает переменной владельца экземпляра новое имя, данное параметром, в то время как 1-й конструктор будет оставлять имя по умолчанию "NoName" без изменений.
Остальная часть программы является определением методов.
Методы моделируют определенное поведение автомобиля.
Здесь определяются три метода.
Первый метод moveCar перемещает автомобиль на определенное расстояние, и расстояние указано здесь параметром dist целого типа.
Обратите внимание, комментарий говорит, что метод moveCar может двигать автомобиль вперед или назад.
Значение dist будет положительным, если автомобиль двигается вперед, и отрицательным, если автомобиль двигается назад.
Так как автомобиль переехал на некоторое расстояние, показания одометра должны быть обновлены путем добавления пройденного расстояния.
Но тут нельзя просто добавить значение dist.
Подумайте о том, что произойдет, если автомобиль движется назад или расстояние отрицательно?
Добавление отрицательного значения в одометр уменьшит показания одометра.
Но вы знаете, отмотка одометра транспортного средства, является незаконной.
Таким образом, вместо того чтобы просто добавить расстояние, расстояние должно быть заменено абсолютной величиной dist, так что общее пройденное расстояние будет увеличено независимо от того, перемещается автомобиль вперед или назад.
Можно вычислить абсолютное значение с помощью метода abs библиотеки Math.
Метод затем просто печатает сообщение о действии, которое метод, как предполагается, выполняет.
Следующий метод turnCar будет осуществлять действие поворота автомобиля, и угол поворота задается в виде параметра angle, но в этом случае типа double.
Опять же, этот метод просто печатает сообщение, без фактической реализации поворота.
Последний метод getOdometer используется для получения показаний одометра.
Заметьте, что метод getOdometer возвращает тип int и выражение начинается с ключевого слова return внутри метода.
Я буду обсуждать метод, который возвращает значение, детально позже.
Программа заканчивается закрывающей фигурной скобкой.
Теперь давайте вернемся к среде IntelliJ IDEA, чтобы увидеть, как этот класс автомобилей работает.
Демонстрация примера
Давайте откроем IntelliJ IDEA.
Вы можете создать новый проект, выбрав "Create New Project".
Выберем создание Java проекта.
Вы можете выбрать место, где вы хотите сохранить ваш проект, а затем дать ему имя.
Давайте просто назовем проект «Cars».
И нажмем кнопку "Finish".
Появится окно нового проекта, который не содержит пока никакого кода.
Мы можем начать писать нашу программу, создав новый класс, так как все программы Java это классы.
После нажатия "New Java Class", появится диалоговое окно.
И вы должны ввести имя класса, который вы создаете.
В нашем случае, Car является именем класса, с которым мы хотим работать.
Вы увидите значок Car, созданный в окне проекта.
Дважды щелкните по нему, и класс откроется в окне редактора.
Вы можете увидеть, что здесь для вас уже создан шаблон, который начинается с документации, а затем идет заголовок класса, вместе с телом определения класса, заключенным в фигурные скобки.
Это на самом деле уже готовый класс, который может быть скомпилирован без ошибок, хотя он не может делать ничего полезного.
Я вернусь к этому шаблону, чтобы обсудить общую структуру программ Java.
На данный момент, давайте просто заменим тело определения класса примером автомобиля, что мы только что обсуждали.