ООП с использованием Java-технологии

Введение

Java-технология охватывает большую область, но язык сам по себе не является очень большим. Однако описать его — не простая задача. Данный раздел руководства не рассматривает язык полностью. Вместо этого будет рассмотрено все, что вам необходимо знать для начала работы с языком, и то, с чем вы наиболее вероятно столкнетесь как начинающий программист. В других учебниках рассмотрены различные аспекты языка Java, дополнительные полезные библиотеки фирмы Sun (и других источников) и даже разные IDE.

Мы приведем здесь достаточно информации с пояснениями и примерами кода, для того чтобы вы смогли начать написание Java-программ и научиться правильно применять ООП в среде Java. Сейчас это зависит только от практики и обучения.

Большинство руководств для начинающих читаются как справочные книги по спецификации языка. Сначала вы видите все синтаксические правила, затем некоторые примеры использования, затем более сложные темы, например, объекты. Мы не будем придерживаться этой схемы. Мы поступаем так потому, что главной причиной плохого объектно-ориентированного кода в программах на Java является отсутствие погруженности начинающих программистов в объекты с самого начала обучения. Объекты рассматриваются как дополнительная возможность, или вспомогательная тема. Вместо этого мы совместим изучение синтаксиса Java с изучением Java OO. Таким образом, в конце обучения вы будете иметь цельную картину использования языка в контексте объектно-ориентированного подхода.

Структура Java-объекта

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

package   packageName ;

import   packageNameToImport ;

  accessSpecifier  class   ClassName  {
	  accessSpecifier 
   dataType 
   variableName  [=   initialValue  ];
	...
	
	  accessSpecifier  ClassName(   аргументы  ) {
		  оператор (операторы) конструктора  
	}

	  accessSpecifier 
   returnValueDataType 
   methodName  (   аргументы  ) {
		  оператор (операторы)  
	}	
}

Здесь присутствуют несколько концепций, которые мы обсудим в следующих разделах.

Пакеты (package)

Объявление package идет первым при определении класса:

package   packageName ;

Каждый Java-объект существует в пакете. Если вы не укажете явно, к какому из них он принадлежит, Java поместит его в пакет по умолчанию. Пакет — это просто набор объектов, каждый из которых (обычно) как-то связан с другими объектами в пакете. Пакет ссылается на путь к файлу в вашей файловой системе. Названия пакетов используют схему с точками для преобразования этого пути к файлу в подходящий вид для Java-платформы. Каждая часть названия пакета называется узлом .

Например, в пакете java.util.ArrayList java — это узел, util — узел и ArrayList — тоже узел. Последний узел ссылается на файл ArrayList.java .

Выражения import

В определении класса далее следуют выражения import :

import   packageNameToImport ;

...

Когда ваш объект использует объекты из других пакетов, Java-компилятор должен знать, где их найти. Выражения import указывают компилятору месторасположение используемых вами классов. Например, если бы я хотел использовать класс ArrayList из пакета java.util , то должен был бы написать следующее выражение:

import java.util.ArrayList;

Каждое выражение import заканчивается точкой с запятой, как и большинство выражений в языке Java. Вы можете иметь сколько угодно выражений import для указания Java месторасположения используемых вами классов. Например, если бы я хотел использовать класс ArrayList из пакета java.util и класс BigInteger из пакета java.math , то мог бы написать следующие выражения:

import java.util.ArrayList;
import java.math.BigInteger;

Если вы импортируете более одного класса из одного и того же пакета, то можете использовать сокращенную запись. Например, если бы я хотел использовать ArrayList и HashMap , оба из пакета java.util , я мог бы импортировать их следующим образом:

import java.util.*;

Вы должны указывать выражение import для каждого уникального пакета, из которого вы выполняете импорт.

Объявление класса

Далее идет определение класса :

   accessSpecifier  class   ClassName  {
	  accessSpecifier 
   dataType 
   variableName  [=   initialValue  ];
	...
	
	  accessSpecifier  ClassName(   аргументы  ) {
		  оператор (операторы) конструктора  
	}

	  accessSpecifier 
   returnValueDataType 
   methodName  (   аргументы  ) {
		 оператор (операторы)   
	}	
}

Вы определяете Java-объект как класс. Представляйте класс как шаблон для объекта, примерно как форму для печенья. Класс определяет тип объекта, который вы можете создать с его помощью. Вы можете наштамповать любое количество объектов этого типа. Когда вы делаете это, то создаете экземпляр класса. Примечание: Слово объект обычно используется взаимозаменяемо как для ссылки на класс, так и для ссылки на экземпляр класса.

Спецификатор доступа (accessSpecifier) для класса может иметь несколько значений, но чаще всего он устанавливается в значение public (открытый), и мы будем рассматривать в данном руководстве только его. Назвать класс вы можете как угодно, но по соглашению имена классов начинаются с большой буквы, и с большой буквы начинается также каждое последующее слово в имени.

Классы имеют два типа членов: переменные (или данные-члены ) и методы. Все члены класса определены в теле класса, которое находится внутри одного набора фигурных скобок для класса.

Переменные

Значения переменных класса являются тем, чем отличается каждый экземпляр класса. Вот почему их часто называют переменными экземпляра. Переменная имеет спецификатор доступа, тип данных, имя и (не обязательно) начальное значение. Вот список спецификаторов доступа и их значений:

  • public (открытый): Любой объект любого пакета может видеть переменную.
  • protected (защищенный): Любой экземпляр класса, любой подкласс в этом же пакете и любой не подкласс этого же пакета может видеть переменную. Подклассы в других пакетах не могут видеть переменную.
  • private (закрытый): Ни один объект за исключением конкретного экземпляра данного класса не может видеть переменную, даже подкласс.
  • Спецификатор отсутствует (или p ackage protected ): Только классы того же пакета, в котором находится класс, содержащий переменную, могут видеть ее.

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

Методы

Методы класса определяют, что он может делать. Есть два типа методов в языке Java:

  • Конструкторы
  • Остальные методы

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

Конструкторы

Конструкторы позволяют вам указать, как создавать экземпляр класса. Конструктор объявляется следующим образом:

   accessSpecifier  ClassName(   аргументы   ) {
	  оператор (операторы) конструктора  
}

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

ClassName variableHoldingAnInstanceOfClassName = new ClassName(   аргументы   );

При вызове конструктора используется ключевое слово new . Конструкторы могут иметь или не иметь параметры (конструктор по умолчанию не имеет). В строгом смысле конструкторы не являются методами или членами класса. Это особенный зверь в языке Java. На практике они чаще всего выглядят и работают как методы, и многие смешивают их вместе. Просто помните, что они особенные.

Другие методы

Остальными методами в языке Java вы будете пользоваться чаще всего. Объявляются они следующим образом:

   accessSpecifier 
   returnValueDataType 
   methodName  (   аргументы  ) {
	  оператор (операторы)  
}

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

  • Используют буквы
  • Начинаются с маленькой буквы
  • Последовательные слова начинаются с больших букв

Методы вызываются следующим образом:

returnType variableForReturnValue = instanceOfSomeClass.methodName(parameter1, parameter2, ...);

Здесь, мы вызываем methodName() объекта instanceOfSomeClass и передаем несколько аргументов. Различия между параметрами и аргументами не велики, но они есть. Метод принимает параметры. Когда вы передаете конкретные значения в вызываемый метод, эти значения являются аргументами вызова.

Рейтинг
( Пока оценок нет )
Загрузка ...