Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Создание классов и объектов
Рассмотрим синтаксис описания классов в Java. Описание класса начинается с ключевого слова class. После этого следует имя класса и в фигурных скобках тело класса. Тело класса состоит из описания членов класса: полей и методов. По большему счету поля — это рассмотренные в предыдущих главах переменные (на данном этапе ограничимся таким определением). Таким образом, синтаксис объявления класса имеет следующий вид: class имя_класса{ // тело класса } В теле класса перечисляются с указанием типа переменные — поля класса (это в том числе могут быть массивы и объекты). Что касается методов, то это — обычные функции, только описанные в рамках класса. Для тех, кто не знаком с азами программирования, заметим, что функция — это именованный фрагмент кода, к которому можно обращаться чрез имя из других частей программы. Описание метода состоит из сигнатуры и тела метода. Сигнатура метода, в свою очередь, состоит из ключевого слова, которое обозначает тип возвращаемого методом результата, имени метода и списка аргументов в круглых скобках после имени метода. Аргументы разделяются запятыми, для каждого аргумента перед формальным именем аргумента указывается его тип. Тело метода заключается в фигурные скобки и содержит код, определяющий функциональность метода. В качестве значения методы в Java могут возвращать значения простых (базовых) или ссылочных типов (объекты). Если метод не возвращает результат, в качестве идентификатора типа указывается ключевое слово void. Синтаксис объявления метода имеет вид: тип_результат имя_метода(аргументы){ // тело метода } Значение, возвращаемое методом, указывается после инструкции return. Другими словами, выполнение инструкции return приводит к завершению выполнения метода, и если после этой инструкции указано некоторое выражение, то значение этого выражения возвращается в качестве результата метода. Само собой разумеется, что тип указанного после инструкции return выражения должен совпадать с типом результата, задекларированным в сигнатуре метода. Отметим, что сигнатура метода может содержать и другие ключевые слова (например, идентификатор уровня доступа), но о них речь будет идти позже. Программы, которые рассматривались до этого, содержали один класс. Точнее, все эти программы состояли из одного класса. В этом классе описывался всего один метод — главный метод программы main(). Для удобства будем называть класс, содержащий основной метод main(), основным классом программы. В основном классе ранее никаких полей и дополнительных методов не объявлялось (хотя это допустимо и нередко так и поступают). Мы продолжим придерживаться этой традиции (пока, во всяком случае). Сказанное, в свою очередь, означает, что кроме базового класса придется создать еще один класс и, соответственно, объект этого класса в методе main(). Таким образом, мы плавно подходим к способам создания объектов. Рассмотрим наиболее простой вариант без особого углубления в подробности. В некотором смысле создание объекта напоминает создание массива. Объект создается в два этапа, которые обычно объединяют. На первом этапе объявляется объектная переменная или переменная объекта — формально, это имя объекта. С технической точки зрения объектная переменная содержит в качестве значения адрес объекта. Второй этап состоит в выделении в памяти места под объект (непосредственно создание объекта) и присваивание в качестве значения объявленной на предыдущем этапе объектной переменной ссылки на созданный объект. Синтаксис объявления объектной переменной мало отличается от объявления переменной базового типа с той лишь разницей, что в качестве типа переменной указывается имя класса, для которого создается объект. Создание объекта (выделение памяти под объект) выполняется с помощью оператора new, после которого указывается имя класса с пустыми круглыми скобками. На самом деле в этом месте указывается конструктор с аргументами, но поскольку конструкторы рассматриваются в следующей главе, пока что примем на веру, что объекты создаются именно так. Таким образом, синтаксис создания объекта имеет вид: имя_класса имя_объекта; // объектная переменная имя_объекта=new имя_класса(); // выделение памяти Обычно эти две команды объединяют: имя_класса имя_объекта=new имя_класса(); Пример объявления класса, содержащего два поля и метод: class MyClass{ double x; int m; void set(double z, int n){ x=z; m=n; } } Класс имеет название MyClass и содержит два поля (поле x типа double и поле m типа int), а также метод с названием set(). Метод не возвращает результат, поэтому в сигнатуре метода в качестве типа возвращаемого результата указано ключевое слово void. У метода два аргумента: один типа double и второй типа int. Первый аргумент присваивается в качестве значения полю x, второй определяет значение поля m. Обращаем внимание, что описание класса к созданию объектов не приводит. Другими словами, описывающий класс код — это всего лишь шаблон, по которому впоследствии можно создавать объекты, а можно и не создавать. В данном случае команды по созданию объекта класса MyClass могут выглядеть так: MyClass obj; // Объектная переменная obj=new MyClass(); // Создание объекта Или так: MyClass obj=new MyClass(); В последнем случае объединены две команды: команда объявления объектной переменной и команда создания объекта. Как уже упоминалось, Java-программа может состоять из нескольких классов. Классы можно описывать в разных файлах, но каждый класс должен быть описан только в одном файле. Еще одно замечание предназначено для тех, кто программирует в С++. В отличие от этого языка программирования, в Java описание метода и его реализация должны размещаться вместе в теле класса. Поскольку все объекты класса создаются по единому шаблону, очевидно, что они имеют одинаковый набор полей и методов. Если в программе используется несколько объектов одного класса, необходимо как-то различать, поле или метод какого объекта вызывается — ведь только по названию метода или поля этого не определишь. В Java, как и в прочих объектно-ориентированных языках, применяют так называемый точечный синтаксис. Основная его идея состоит в том, что при обращении к полю или методу объекта сначала указывается имя этого объекта, затем ставится оператор «точка» и после этого имя поля или метода. Забегая наперед, заметим, что кроме обычных существуют так называемые статические члены класса (обычно это поля). Статический член класса один для всех объектов класса. Для использования статического члена класса объект создавать не обязательно. К статическому члену обычно обращаются тоже через точечный синтаксис, но вместо имени объекта указывается имя класса (хотя можно задействовать и стандартный способ обращения через объект). Подробнее статические члены класса обсуждаются позже. В листинге 4.1 приведен пример программы; в ней, кроме основного класса, описан еще один класс, в котором объявляются несколько полей и два метода, а также показано, как эти поля и метод используются в программе.
Листинг 4.1. Класс с полями class Coords{ // Координаты точки: double x; double y; double z; // Метод для присваивания значений полям: void set(double a, double b, double c){ x=a; y=b; z=c; } // Методом вычисляется расстояние до точки: double getDistance(){ return Math.sqrt(x*x+y*y+z*z); } } class CoordsDemo{ public static void main(String[] args){ // Создание объекта: Coords obj=new Coords(); // Вызов метода: obj.set(5.0, 0, 2.5); // Обращение к полю объекта: obj.y=-4.3; // Обращение к методу объекта: System.out.println(" Расстояние до точки: " +obj.getDistance()); } } В программе объявляется класс Coords, который имеет три поля x, y и z — все типа double. Поля являются аналогом координат точки в трехмерном пространстве. Кроме этого, у класса есть два метода. Метод set() не возвращает результат (использован идентификатор типа void) и предназначен для присваивания значений полям. У метода три аргумента — значения, присваиваемые полям x, y и z соответственно. Метод getDistance() не имеет аргументов и возвращает в качестве результата значение типа double, которым определяется расстояние от начала координат системы до точки (напомним, что для точки с координатами x, y и z расстояние определяется выражением ). Для вычисления квадратного корня использована статическая функция sqrt() встроенного Java-класса Math. При вызове этой функции необходимо указать имя класса, то есть в данном случае инструкция вызова функции имеет вид Math.sqrt(). В методе main() класса CoordsDemo командой Coords obj=new Coords() создается объект obj класса Coords. Командой obj.set(5.0, 0, 2.5) для вновь созданного объекта вызывается метод set(), которым задаются значения полей объекта. Далее с помощью инструкции obj.y=-4.3 значение поля y меняется. Наконец, еще один метод getDistance() вызывается через инструкцию obj.getDistance() прямо в аргументе метода println(). Здесь использовано то обстоятельство, что метод возвращает значение. В результате выполнения программы получаем сообщение: Расстояние до точки: 7.052659073002181 Сделаем несколько замечаний относительно компиляции программы. В Java для каждого класса программы в результате компиляции создается отдельный файл. Каждый такой файл имеет расширение.class, а его название совпадает с именем класса. Запускать на выполнение следует файл, соответствующий основному классу программы, то есть классу, в котором описан метод main().
|