Классы. Применение классов в программах на Java. Определение класса и объекта класса. Примеры

Классы. Применение классов в программах на Java. Определение класса и объекта класса. Примеры


Содержание



1. Для чего в программах используются классы?

В языке программирования Java разработка всех программ базируется на объектно-ориентированном подходе. Можно сказать, что Java – этот строго объектно-ориентированный язык программирования. В основе объектно-ориентированного программирования лежат понятия «класс» и «объект». Программист, который разрабатывает программу на основе объектно-ориентированного подхода, должен уметь выделять в проблемной области (задаче) логически-завершенные единицы. Каждая логически завершенная единица должна быть реализована как некоторый класс. В целом, при программировании задач с использованием объектно-ориентированной парадигмы, программист должен уметь:

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

2. Определение класса. Общая форма объявления класса. Ключевое слово class

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

При использовании классов, в программах выделяются две составляющих:

  • объявление класса как отдельного составного типа данных;
  • реализация объекта (переменной) этого класса.

Объявление класса – это объявление нового составного типа данных. Этот тип данных содержит методы обработки этих данных.

Объявление класса начинается с ключевого слова class. В простейшем случае общая форма объявления класса:

class ClassName
{
    type variable1;
    type variable2;
    ...
    type variableN;

    type method1(parameters1)
    {
        // ...
    }

    type method2(parameters2)
    {
        // ...
    }

    ...

    type methodN(parametersN)
    {
        // ...
    }
};

где

  • type – некоторый тип данных. Это может быть примитивный (базовый) тип данных или составной (сложный) тип данных, например некоторый класс;
  • variable1, variable2, …, variableN – переменные экземпляра класса;
  • method1, method2, …, methodN – методы класса;
  • parameters1, parameters2, parametersN – параметры, которые соответственно получают методы класса method1, method2, methodN.

3. Что такое объект класса? Общая форма объявления объекта класса. Оператор new

Объект класса – это объявление переменной. Тип переменной – это есть тип с именем класса. При объявлении объекта класса создается экземпляр класса. Понятие «объект класса» и «экземпляр класса» можно считать синонимами.

Общий вид объявления объекта класса в языке Java:

ClassName ObjName = new ClassName();

где

  • ClassName – имя класса
  • ObjName – имя объекта (переменной) класса.

Возможен и другой вариант объявления объекта класса:

ClassName ObjName;
ObjName = new ClassName();

После вышеприведенных объявлений, переменная ObjName содержит адрес памяти конкретного объекта типа ClassName.

В языке Java создание объекта класса происходит в 2 этапа:

  • сначала объявляется переменная (объект) типа класс. Эта переменная еще не определяет объект. Она есть переменной, которая может ссылаться на объект;
  • создается конкретная физическая копия объекта, которая присваивается этой переменной типа класс (выделяется память). Это осуществляется с помощью оператора new.

4. Какое отличие между понятиями «класс» и «объект класса»?

Класс – это только информация о новом составном (сложном) типе данных. Фактически, класс описывает формат данных. Объявление класса носит декларативный характер. Имя класса есть уникальным во всей программе.

Объект класса – это конкретный экземпляр класса, в котором данные класса имеют некоторые заполненные значения. В отличие от объявления (декларирования) класса, для объекта класса выделяется память. Объектов одного и того же класса может быть несколько.

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

Пример 1. Класс Circle, реализующий геометрическую фигуру окружность. В классе объявляются:

  • три скрытые (private) переменные (члены данных) класса с именами x, y, r. Эти переменные определяют координату центра окружности и ее радиус;
  • четыре метода SetXYR(), GetX(), GetY(), GetR(). Эти методы являются общедоступными (public). По умолчанию, методы и переменные в классах на языке Java есть общедоступными, если перед ними нет ключевого слова private. Поэтому эти четыре метода есть видимыми за пределами класса.
public class Circle
{
    private int x, y; // координаты центра окружности
    private int r; // радиус окружности

    // метод класса, который устанавливает новые значения x,y,r
    void SetXYR(int nx, int ny, int nr)
    {
        x = nx;
        y = ny;
        r = nr;
    }

    // методы класса, которые возвращают значение
    int GetX()
    {
        return x;
    }

    int GetY()
    {
        return y;
    }

    int GetR()
    {
        return r;
    }
}

Использование класса в другом методе

// объявить переменную типа Circle
Circle c1 = new Circle(); // c1 - объект класса Circle, выделение памяти

c1.SetXYR(3, 5, 2); // вызвать метод, который устанавливает новые x, y, r

// проверка
int d;
d = c1.GetX(); // d = 3, вызов метода GetX() класса
d = c1.GetR(); // d = 2

В вышеприведенном коде объявляется объект (экземпляр) класса с именем c1. Память для объекта c1 выделяется с помощью оператора new. Операция выделения памяти оператором new есть обязательной (в отличие от языка C++).

Далее вызываются общедоступные (public) методы класса Circle.

Пример 2. Класс MyName, реализующий фамилию, имя и отчество.

В классе объявляется:

  • 3 переменные-экземпляры класса с именами name, surname, patr;
  • 7 методов класса с именами GetName(), GetSurname(), GetPatr(), SetName(), SetSurname(), SetPatr(), SetMyName().
// объявление класса MyName
class MyName
{
    // переменные-экземпляры класса MyName
    String name; // Фамилия
    String surname; // имя
    String patr; // отчество

    // методы класса
    String GetName() { return name;      }
    String GetSurname() { return surname; }
    String GetPatr() { return                        ; }
    void SetName(String nName) { name = nName; }
    void SetSurname(String nSurname) { surname = nSurname; }
    void SetPatr(String nPatr) { patr = nPatr; }

    void SetMyName(String nName, String nSurname, String nPatr)
    {
        name = nName;
        surname = nSurname;
        patr = nPatr;
    }
}

Использование класса MyName в другом методе или программном коде

...

// использование класса MyName в некотором методе
// создание объекта (экземпляра) класса с именем nm1
MyName nm1 = new MyName();

// создание объекта (экземпляра) класса с именем nm2
MyName nm2;
nm2 = new MyName();
String s;

// вызов методов класса из объекта nm1
nm1.SetName("Johnson");
nm1.SetSurname("John");
nm1.SetPatr("");
s = nm1.GetSurname(); // s = "John"

// вызов методов класса из объекта nm2 класса
nm2.SetMyName("David", "Albright", "");
s = nm2.GetName(); // s = "David"

nm2.name = "Michael"; // так тоже можно
s = nm2.GetName(); // s = "Michael"

...

6. Какой тип доступа (private, public) имеют члены класса по умолчанию?

По умолчанию, члены класса имеют тип доступа public. Они являются общедоступными.

7. Что такое классы-«обертки» или классы «упаковки»? Какое назначение классов-«оберток»? Пример

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

Далее приводится перечень соответствий примитивного типа и типа (класса) упаковки:

boolean => Boolean
char    => Character
byte    => Byte
short   => Short
int     => Integer
long    => Long
float   => Float
double  => Double
void    => Void

Например. Ниже приведены примеры преобразования разных примитивных типов в типы-упаковки и наоборот

// преобразование типов int <=> Integer 
int d = 25;
Integer D = new Integer(d); // D = 25

D = new Integer(38);
d = D.intValue(); // d = 38

// преобразование типов float <=> Float
float f = 3.85f;
Float F = new Float(f); // F = 3.85 

F = new Float(7.77f); 
f = F.floatValue(); // f = 7.77

// преобразование типов char <=> Character
char c = 'A';
Character C = new Character(c); // C = 'A'

C = new Character('Z');
c = C.charValue(); // c = 'Z'


Связанные темы