Введение в ООП

Понятие и определение класса
Класс – это шаблон для объекта. Объект – это экземпляр класса. Данные класса называются переменными экземпляра. Каждый объект содержит собственную копию этих переменных. Метод предназначен для обработки данных.  Определение класса:

class classname  {
type instance-variable1;
type instance-variable2;
// …
type instance-variableN;
type methodname1 (parameter-list) {
// тело метода
}
type methodname2 (parameter-list) {
// тело метода
}
//…
type methodnameN(parameter-list) {
// тело метода
}
}
 

Рассмотрим пример класса, с помощью которого определяется минимальное и максимальное число.

class MinMax  {
int x;
int y;
public int max(){
if(x>y) return x;
else return y;}
public int min(){
if(x<y) return x;
else return y;}
}

Для определения экземпляра класса используется синтаксис:
ИмяКласса имяпеременной;
имяпеременной = new ИмяКласса (параметры инициализации);
или
ИмяКласса имяпеременной = new ИмяКласса (параметры инициализации);

Членами класса могут быть:
•  поля;
•  методы;
•  внутренние типы (классов и интерфейсов;
•  конструкторы;
•  инициализаторы;
•  статические инициализаторы.

class Point {
int x=3;
int x() {return x;}
int y=x();
public static void main (String s[]) {
Point p=new Point();
System.out.println(p.x+", "+p.y);
System.out.println(p.x());
 
}
}

 

Модификаторы класса
public
– класс доступен для использования, наследования вне зависимости от пакета или от каталога; public-классы должны храниться  в файлах с именем имя_класса.java.
friendly – модификатор класса по умолчанию, если модификатор не определен явно для класса. Такой класс доступен только для объектов, находящихся в том же пакете. Вне пакета он выступает как private.
final – класс не может быть наследован, т.е. иметь подклассов.
abstract – класс, в котором объявлен хотя бы один абстрактный метод. Для таких классов нельзя создавать объекты. Такие классы используются для производных классов, а также для организации стандартизированных интерфейсов.

abstract class Myclass {
abstract void actMet();
}

 

Объявление объектов и операция new
Получение объектов класса − это двухшаговый процесс. Во-первых, нужно объявить переменную типа «класс». Она не определяет объект. Это просто переменная, которая может ссылаться на объект. Во-вторых, нужно получить актуальную, физическую копию объекта и назначать ее этой переменной. Это можно сделать с помощью операции new. Операция new распределяет динамически (т.е. во время выполнения) память для объекта и возвращает ссылку на нее. Данная ссылка является адресом ячейки памяти, выделенной объекту вышеуказанной операцией. Затем эта ссылка сохраняется в переменной. Таким образом, в Java все объекты класса должны быть распределены динамически.
Ниже приведен пример, в котором создается объект типа Box двумя способами

// первый способ	
Box mybox = new Box();
// второй способ
Box mybox; // объявить ссылку на объект
mybox = new Box(); // распределить память для Вох-объекта

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

Метод main
Итак, виртуальная машина реализуется приложением операционной системы и запускается по обычным правилам. Программа, написанная на Java, является набором классов. Требуется некая входная точка, с которой должно начинаться выполнение приложения. Такой входной точкой, по аналогии с языками C/C++, является метод main(). Для объявления метода main() используется следующий синтаксис:

public static void main(String[] args) {}

Модификатор static позволяет вызвать метод main(), не создавая объектов. Метод не возвращает никакого значения, хотя в C есть возможность указать код возврата из программы. В Java для этой цели есть метод System.exit(), который закрывает виртуальную машину и имеет аргумент типа int.
Аргументом метода main() является массив строк. Он заполняется дополнительными параметрами, которые были указаны при вызове метода.
Пример демонстрирует вывод в консоль параметров, переданных в метод main. Для запуска примера необходимо передать сами параметры, например

java test.first.Test HelloWorld
package test.first;
public class Test {
public static void main(String[] args) {
for (int i=0; i<args.length; i++) {
System.out.print(args[i]+" ");
}
System.out.println();
}
}
Результат работы программы:
HelloWorld

Если вышеприведенный модуль компиляции сохранен в файле Test.java, который лежит в директории test\first, то вызов компилятора записывается следующим образом:

javac test\first\Test.java

А вызов виртуальной машины:

java test.first.Test

 

Конструкторы
Конструктор – это тот же метод класса, обладающий некоторыми особенностями:
•    имеет такое же название, как и класс;
•    вызывается сам;
•    не возвращает никакого значения.
Ниже продемонстрирован пример перегрузки конструктора.

// перегрузка конструктора
class worker
{ private int Age;
public String Name;
public worker() // конструктор без параметров
{ Age = 20;}
public worker(int newAge, String newName)
{ Age = newAge;
Name = newName; }
public int getAge()
{return Age;}
};
class worker_pub
{ public static void main(String args[])
{ worker wrk1 = new worker( );
worker wrk2 = new worker(40, "Petrov");
System.out.println(wrk1. getAge()+wrk1.Name);
System.out.println(wrk2. getAge()+wrk2.Name); } }
Результат выполнения программы:
20null
40Petrov
Если конструктор не определяется явно, то Java создает его сам, без параметров.

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

На рисунках приведена графическая интерпретация таблицы.
Атрибут Разрешенный доступ
Отсутствие атрибута доступа Из любого класса в том же пакете
public Из любого класса откуда угодно
private Никакого доступа вне класса
protected Из любого класса в том же пакете и из любого подкласса где угодно

Атрибуты доступа в рамках пакета:

vvedenie_v_oop_1

Атрибуты доступа для нескольких пакетов:

 

vvedenie_v_oop_2

 

Добавить комментарий


Защитный код
Обновить

Разработчику

Скрипты