Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы Рыков.docx
Скачиваний:
103
Добавлен:
21.04.2015
Размер:
305.38 Кб
Скачать

33. Приложения с графическим интерфейсом с использованием gui-пакетов и апплеты.

Любое приложение с GUI является расширением (наследником) определенного компонента из библиотеки, как правило это заготовка для формы, на которую в дальнейшем попадут другие компоненты интерфейса (надписи, поля, кнопки и пр.)

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

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

(GUI – Graphic User Interface) выглядят как оконные приложения, состоящие из одной или нескольких форм, где пользователь, пользуясь привычными жлементами управления (текстовыми полями, кнопками, ползунками и пр.) управляет программой. При этом на Java могут создаваться «настольные» приложения самого серьезного уровня. Например, на Java созданые интегрированная среда разработки NetBeans и свободный офисный пакет OpenOffice.

34. Классы языка Java и их синтаксис. Члены класса. Статические члены класса. Поля и методы класса. Главный метод приложения. Конструкторы класса. Цепочки конструкторов. Блоки инициализации. Статические поля и методы классов. Инициализация статических полей класса.

Базовым элементом объектно-ориентирован­ного программирования в языке Java являет­ся класс.  Класс — разновидность абстрактного типа данных в объектно-ориентированном программировании, характеризуемый способом своего построения. Наряду с понятием «объекта» класс является ключевым понятием в ООП. Суть отличия классов от других абстрактных типов данных состоит в том, что при задании типа данных класс определяет одновременно и интерфейс, и реализацию для всех своих экземпляров, а вызов метода-конструктора обязателен.Java высвобождает мощь объектно-ориентированной разработки приложений, сочетая простой и знакомый синтаксис с надежной и удобной в работе средой разработки. Это позволяет широкому кругу программистов быстро создавать новые программы и новые апплеты.

Список членов класса можно разделить на разделы privateprotected и public с помощью ключевых слов, известных как описатели доступа

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

Статические члены класса

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

По́ле кла́сса или атрибу́т (переменная-член, data member, class field, instance variable) в объектно-ориентированном программировании— переменная, связанная склассом или объектом. Все данные объекта хранятся в его полях. Доступ к полям осуществляется по их имени. Обычно тип данных каждого поля задаётся в описании класса, членом которого является поле.

Главный метод создания программы на языке Java.

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

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

Некоторые отличия между конструкторами и другими методами Java:

  • конструкторы не имеют типа возвращаемых данных (на самом деле они всегда возвращают this);

  • конструкторы не могут напрямую вызываться (необходимо использовать ключевое слово new);

  • конструкторы не могут иметь модификаторы synchronized, final, abstract, native и static;

Можно в объявлении класса помещать так называемые блоки инициализации. Блок инициализации будет выполняться при создании объекта. Он располагается между фигурными скобками, например класс с блоком инициализации.

Изменение ключевого слова this состоит в проектировании класса, использующего технику под названием сцепление конструкторов или цепочка конструкторов (constructor chaining). Этот шаблон проектирования полезен, когда имеется класс, определяющий несколько конструкторов. Учитывая тот факт, что конструкторы часто проверяют входящие аргументы на соблюдение различных бизнес-правил, возникает необходимость в избыточной логике проверки достоверности внутри множества конструкторов.

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

В main(), мы создаём объект типа Trylnitialization, и затем вызываем его методом listValues (). Мы тогда создаем второй объект и вызываем методом listValues () для того же. Вывод демонстрирует, что инициализация блока выполняет только однажды, и что значения, переданные для обоих объектов, одни и те же. 

35. Пакеты классов и интерфейсов. Импорт классов и интерфейсов из других пакетов. Разновидности видимости классов и интерфейсов. Соглашения об именовании пакетов, классов, директорий и файлов при программировании на Java.

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

Все идентификаторы, которые мы до сих пор использовали в наших примерах, располагались в одном и том же пространстве имен (name space). Это означает, что нам во избежание конфликтных ситуаций при­ходилось заботиться о том, чтобы у каждого класса было свое уникаль­ное имя. Пакеты — это механизм, который служит как для работы с пространством имен, так и для ограничения видимости. У каждого файла .java есть 4 одинаковых внутренних части, из которых мы до сих пор в наших примерах ис­пользовали только одну. Ниже приведена общая форма исходного файла Java.

  • одиночный оператор package (необязателен)

  • любое количество операторов import (необязательны)

  • одиночное объявление открытого (public) класса

  • любое количество закрытых (private) классов пакета (необязательны)

Первое, что может появиться в исходном файле Java — это оператор package, который сообщает транслятору, в каком пакете должны опре­деляться содержащиеся в данном файле классы. Пакеты задают набор раздельных пространств имен, в которых хранятся имена классов. Если оператор package не указан, классы попадают в безымянное пространст­во имен, используемое по умолчанию. Если вы объявляете класс, как принадлежащий определенному пакету, например; package java.awt.image;

Интерфейсы Java созданы для поддержки динамического выбора (resolution) методов во время выполнения программы. Интерфейсы похожи на классы, но в отличие от последних у интер­фейсов нет переменных представителей, а в объявлениях методов отсут­ствует реализация.

Определение интерфейса сходно с определением класса, отличие со­стоит в том, что в интерфейсе отсутствуют объявления данных и кон­структоров. Общая форма интерфейса приведена ниже:

interface имя { тип_результата имя_метода1(список параметров); тип имя_final1-переменной = значение; }

Символ '*' используется, чтобы импортировать все классы текущего пакета (здесь раскаде_nате). Вышеупомянутая запись включает все классы / интерфейсы, которые найдены в пакете. Чтобы включать определенный класс / интерфейс, найденный в пакете, использует примечание:  import package_name.class_name; 

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

Область видимости самого класса по-разному определяется в разных языках программирования. В одних языках (таких как Delphi) все классы имеют глобальную видимость (с учётом видимости модуля), в других (таких как Java) область видимости класса связана с содержащей его единицей компиляции (в Java — с пакетом), в третьих (таких как C++ и C#) область видимости класса определяется пространствами имён (namespaces), которые задаются программистом явно и могут совпадать или не совпадать с единицами компиляции.

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

36. Наследование полей и методов классов в языке Java. Перекрытие наследуемых методов. Использование конструкторов наследуемых классов. Разновидности видимости членов классов. Полиморфизм. Абстрактные классы. Конечные (final) классы.

Наследование классов

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

  • public class A { }

  • public interface I1 { }

  • public interface I2 { }

  • public class B extends A implements I1, I2 { }

Директива final в объявлении класса делает наследование от него невозможным.

Конструкторы при наследовании вызываются последовательно от самого раннего предка до самого позднего потомка, а деструкторы наоборот — от самого позднего потомка до самого раннего предка. При множественном наследовании у класса может быть более одного предка. В этом случае класс наследует методы всех предков. Множественное наследование реализовано в C++. Из других языков, предоставляющих эту возможность, можно отметить Python и Eiffel. Множественное наследование поддерживается в языке UML.

Область видимостичленов класса (то есть область кода, из которой к ним можно обращаться по неквалифицированному имени — без указания имени класса или объекта) не зависит от их области доступа, и всегда совпадает с кодом методов класса. Область видимости самого класса по-разному определяется в разных языках программирования. В одних языках (таких какDelphi) все классы имеют глобальную видимость (с учётом видимостимодуля), в других (таких какJava) область видимости класса связана с содержащей его единицей компиляции (в Java — спакетом), в третьих (таких какC++иC#) область видимости класса определяетсяпространствами имён(namespaces), которые задаются программистом явно и могут совпадать или не совпадать с единицами компиляции.

В языках программирования и теории типов полиморфизмом называется способность функции обрабатывать данные разных типов. Полиморфизм является фундаментальным свойством системы типов. 

Абстрактный класс в объектно-ориентированном программировании — базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП — полиморфизм. Абстрактный класс может содержать (и не содержать[1]) абстрактные методы и свойства. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Абстрактные классы представляют собой наиболее общие абстракции, то есть имеющие наибольший объём и наименьшее содержание.

Листовой класс (также конечный или финальный класс; англ.Leaf Class) в языках объектно-ориентированного программирования и проектирования представляет собой класс, который не может быть унаследован. Это может определяться как какими-либо договорённостями, так и с помощью использования средств языка. К примеру, в языке Java для этих целей применяется ключевое слово final, а в C#— sealed.

37.Вложенность классов. Статические вложенные и внутренние классы. Доступ к статическим вложенным классам. Внутренние классы. Доступ к внутренним классам. Внутренние локальные классы. Внутренние анонимные классы.

Синтаксис языка Java позволяет нам объявлять классы внутри другого класса, такие классы называются внутренними или вложенными.

Синтаксис

Пример:

class OuterClass {

    ...

    class NestedClass {

        ...

    }

}

Вложенные классы делятся на два вида: статические и не статические. Вложенные классы, объявленные как статические называются вложенными статическими (static nested classes). Не статические называются внутренними (inner classes).

class OuterClass {

    ...

    static class StaticNestedClass {

        ...

    }

    class InnerClass {

        ...

    }

}

Вложенные классы — элементы содержащего их класса. Не статические классы имеют доступ к полям содержащего класса, даже если они объявлены как private. Статические — не имеют доступ к членам внешнего класса. Как и другие поля класса, вложенные классы могут быть объявлены как private, public, protected, или package private.

Для чего использовать вложенные классы

Вот некоторые причины использования вложенных классов:

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

  • Инкапсуляция: допустим, есть два класса A и B, классу B требуется доступ к свойству класса A, которое может быть приватным. Вложение класса B в класс A решит эту проблему, более того сам класс B можно скрыть от внешнего использования.

  • Улучшение читаемости и обслуживаемости кода: вложение малых классов в более высокоуровневые классы позволяет хранить код там, где он используется.

Вложенные классы

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

Доступ к вложенному классу осуществляется с помощью следующей конструкции:

OuterClass.StaticNestedClass

Синтаксис создания объекта вложенного класса:

OuterClass.StaticNestedClass nestedObject =

     new OuterClass.StaticNestedClass();

Внутренние классы

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

OuterClass.InnerClass innerObject = outerObject.new InnerClass();