Понятие и виды классов Java. — КиберПедия 

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

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Понятие и виды классов Java.



Класс — разновидность абстрактного типа данных в объектно-ориентированном программировании (ООП), характеризуемый способом своего построения. Другие абстрактные типы данных — метаклассы, интерфейсы, структуры, перечисления — характеризуются какими-то своими, другими особенностями. Наряду с понятием «объекта» класс является ключевым понятием в ООП, хотя существуют и бесклассовые объектно-ориентированные языки, например, Self, Lua. Суть отличия классов от других абстрактных типов данных состоит в том, что при задании типа данных класс определяет одновременно и интерфейс, и реализацию для всех своих экземпляров, а вызов метода-конструктора обязателен. Точный смысл этой фразы будет раскрыт ниже.

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

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

Везде далее слова «класс», «объект», «интерфейс» и «структура» будут употребляться в своих специальных значениях, заданных в рамках ООП.

 

Определение класса на языке Java с помощью оператора class:

class MyClass {

String name = "Example";

 

// "Конструктор"

public MyClass(String name) {

this.name = name;

}

 

// "Метод"

public String getName() {

return name;

}

}

 

 

Класс это языковая конструкция, определяющая поля данных объектов данного класса (instance variables) и их поведение (methods). Практически класс в Java сам по себе не является объектом. Это лишь шаблон, который определяет, из каких частей будет состоять объект, созданный с помощью этого класса, и как он будет себя вести. Конструкторы.При объявлении класса, возможно, указать методы специального вида, называемые конструкторами и предназначенные для инициализации созданного объекта. Имя этих методов должно совпадать с именем класса, они могут иметь какое-то количество аргументов, например:class Point extends Object {Point() {x = 0.0;y = 0.0;}Point(double x, double y) {this.x = x;this.y = y;}public double x;public double y;}а использованы они могут быть следующим образомPoint a;Point b;a = new Point();b = new Point(1.0, 2.0); Имя this в определении конструктора с аргументами используется для обозначения самого объекта, в методе которого мы находимся, в тех случаях,когда ссылка на этот объект не подразумевается неявно. Методы и посылка сообщений. Если один объект, в программе заставляет другой выполнить какую-то операцию, то принято говорить, что он посылает сообщение другому объекту. Например, можно переопределить класс следующим образом:Pclass Point extends Object {private double x;private double y;public void setX(double x) {this.x = x;}public void setY(double y) {this.y = y;}...}Поля x и y теперь недоступны извне класса, но для изменения их состоянияпредусмотреys специальные методы setX и setY. Финализаторы.Специальное имя finalize зарезервировано для метода, который будет вызван сборщиком мусора перед тем, как объект будет уничтожен. В силу того, что Java освобождает разработчиков от необходимости самим следить за освобождением памяти, занимаемой объектами, необходимость в таких методах обычно возникает лишь тогда, когда надо освободить какие-то внешние ресурсы, например, закрыть открытый файл:protected void finalize() {try {file.close();} catch (Exception e) {}} Производные классы. Наследование классов позволяет создавать новые типы объектов, эффективно использующие функциональность уже существующих типов. Новый тип обычно называется производным классом, а тот, чьи свойства наследуются – базовым классом. Например, можно описать новый класс, соответствующий координатам точки в трехмерном пространстве, на основе уже описанного класса для точки на плоскости.class ThreePoint extends Point {protected double z;ThreePoint() {super();z = 0.0;}ThreePoint(double x, double y, double z) {super(x, y);this.z = z;}}Здесь была добавлена новая координату z, а поля x и y (и методы доступа кним) унаследовали от класса Point. Контроль доступа. Контроль доступа к данным и методам объекта в Java несколько отличается от С++. Помимо трех уровней доступа, имеющихся в С++ (public, private, protected) имеется четвертый, находящийся где-то между уровнями public и protected. Он не имеет имени и используется по умолчанию, когда явно не указан другой уровень. Поля этого типа доступны внутри только одного программного пакета. Пакет представляет группу классов, объединенных в одну логическую группу. Например, классы, описывающие точку и прямоугольник в графическом пакете, могут иметь прямой доступ к полям данных друг друга, запрещенный обычно для остального мира. Также следует отметить, что контроль доступа в C++ помогает программисту лишь при построении программы. Различия между полями, помеченными public и private, отсутствуют в выполняемом модуле, созданном с использованием этого языка. В Java контроль доступа реален, т.к. он осуществляется не только при компиляции, но и непосредственно перед запуском кодов на выполнение виртуальной машиной. Переменные и методы класса.Как и С++ язык Java позволяет использовать переменные и методы, принадлежащие классу целиком. Для определения их используется ключевое слово static. Естественно, что методы самого класса не могут оперировать данными и методами объекта класса, т.к. они не относятся ни к какому определенному объекту. Например, версия реализации класса Rectangle может быть задана следующим образом:class Rectangle extends Object {static final int version = 2 ;static final int revision = 0 ;}Ключевое слово final означает, что значение поля окончательное и изменению не подлежит (это константа). Абстрактные методы.Абстрактные методы - это методы, для которых в данном классе не определена их реализация. Мы указываем лишь на необходимость наличия методов с данным протоколом. Конкретная реализация должна быть осуществлена классами- наследниками. В то же время остальная, "неабстрактная" часть класса может содержать конкретную информацию, которая может быть использована производными классами.Например: abstract class Graphical extends Object{protected Point lowerLeft;protected Point upperRight;...public void setPosition(Point ll, Point ur){ lowerLeft = ll;upperRight = ur;}abstract void drawMyself();}class Rectangle extends Graphical{ void drawMyself(){ ....}}

 





Рис.1.1.1. Модификаторы доступа.

 

· private члены класса доступны только внутри класса

· package-private или default (по умолчанию) члены класса видны внутри пакета

· protected члены класса доступны внутри пакета и в классах-наследниках

· public члены класса доступны всем






Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...





© cyberpedia.su 2017 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав

0.006 с.