Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Міністерстві освіти і науки, молоді та спорту України

Поиск

Міністерстві освіти і науки, молоді та спорту України

Чорноморський державний університет

Імені Петра Могили

Факультет комп'ютерних наук

Кафедра інтелектуальних інформаційних систем

Методичний посібник до лабороторних робіт з курсу

Об’єктно-орієнтование програмування ч.2

(Java SE 1.6)

 

 

для освітніх напрямків підготовки бакалаврів

050101- Комп'ютерні науки

050102- Комп'ютерна інженерія

 

Укладач:

Ю.О. Нездолій

 

 

м. Миколаїв - 2010

Методическое пособие к выполнению лабораторных работ.

Вступительная часть.

Целью данного пособия являтся оказание помощи слушателям курса Объектно-ориентированное программирование ч.2(Java SE 1.6) в получении практических навыков в написании программ на языке программирования Java. Описание теоретических основ

Общие требования к оформлению и выполнению работ.

- лабораторная работа должна быть оформлена в электронном виде в полном соответствии с требованиями учебного заведения к оформлению такого вида работ. Все материалы должны находиться в директории с именем GGG_LL_VV_прізвище студента, где LL-номер лабороторной, GGG- номер группы,VV-номер варианта

и заархивированы в архив LL_GGG_прізвище.rar Материалы должны содержать краткую пояснительную записку не более чем на 3 листах (размер шрифта 10) с описанием задания и его реализации если это необходимо. К пояснительной записке прилагается проект, реализованный в среде NetBeans 6.9 и выше,компилирующийся и запускающийся без ошибок, в котором реализованы все задания лабороторной работы.

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

 

Краткое изложение теоретических основ, необходимых для выполнения лабораторных работ.

Программа, написанная на Java представляет собой набор экземпляров классов, взаимодействующих между собой. Рассмотрим на модели отношений реальных объектов(=Человек=,= Студент=, =Учащийся=,=Студент, занимающийся спортом=) некоторые элементы ООП.Ниже приведен код простого класса Человек на Java:

1. Листинг:

1.1. package javaapplication38;

1.2. import java.util.Date;

1.3. /*

1.4. це

1.5. складний

1.6. коментар

1.7. */

1.8.

1.9. public class Human {

1.10. String fio; // це простий коментар

1.11. private int age; //это свойство =возраст= каждого экземпляра класса Human

1.12. private String adress="адреса не визначена"; //это свойство =адрес= каждого экземпляра класса Human

1.13. private Date birthday=new Date(); //это свойство =день рождения= каждого экземпляра класса Human

1.14. private String inn="11111111111"; //это свойство =идентификационный код=

1.15.

1.16. public Human() { // это конструктор по умолчанию

1.17.

1.18.

1.19. } // вот здесь он закончился

1.20.

1.21. public Human(String fio1, int age2, String adress3, Date birthday56,String inn_3) { // это еще один конструктор

1.22. this.fio = fio1;

1.23. this.age = age2;

1.24. this.adress = adress3;

1.25. this.birthday = birthday56;

1.26. this.inn=inn_3;

1.27. }

1.28.

1.29. public Human(String fio) { // и это конструктор

1.30. this.fio = fio;

1.31. }

1.32. public String getAdress() {

1.33. return adress;

1.34. }

1.35. public void setAdress(String adress) {

1.36. this.adress = adress;

1.37. }

1.38.

1.39. public static void main(String[] args) {// метод класса Human

1.40. Human hum1=new Human("Петров Іван Сергійович");// создание экземпляра класса Human

1.41. Human hum2=new Human("Іванова Оксана Володимирівна");// создание экземпляра класса Human

1.42. System.out.println(hum1); // вывод на консоль информации по экз. hum1 класса Human

1.43. System.out.println(hum2); // вывод на консоль информации по экз. hum2 класса Human

1.44. hum1.setAdress("м. Миколаїв, вул. Мархлевського 34, кв.56");// вызов метода для hum1 по замене адреса

1.45. System.out.println(hum1); // вывод информации по экз. hum1 класса Human после коррект. адреса

1.46. }

1.47.

1.48. public String toString(){ // метод класса Human

1.49. return "Це екземпляр класу Human зі слідуючими властивостями -\n"

1.50. +"Прізвище- "+this.fio+"\nАдреса - "+this.adress+

1.51. "\nДата народження-" +this.birthday.toString()+"\n\n";

1.52. }

1.53. public static int sum1(int var1,int var2){

1.54. return (var1+var2);

1.55. }

1.56. }

 

 

Если этот код запустить на выполнение, то мы увидим в окне вывода следующие строки-

 

Це екземпляр класу Human зі слідуючими властивостями -

Прізвище- Петров Іван Сергійович

Адреса - адреса не визначена

Дата народження-Thu Dec 23 06:17:06 EET 2010

 

Це екземпляр класу Human зі слідуючими властивостями -

Прізвище- Іванова Оксана Володимірівна

Адреса - адреса не визначена

Дата народження-Thu Dec 23 06:17:06 EET 2010

 

Це екземпляр класу Human зі слідуючими властивостями -

Прізвище- Петров Іван Сергійович

Адреса - м. Миколаїв, вул. Мархлевського 34, кв.56

Дата народження-Thu Dec 23 06:17:06 EET 2010

 

Весь приведенный код находиться в файле Human.java. В файле может быть объявлено несколько классов, но только один из них может иметь модификатор доступа public. Название файла должно совпадать с названием этого public- класса. В этом классе вы можете увидеть метод main, в качестве параметров этого метода выступает массив данных типа String, массив называется args(строка 1.39). Данный метод имеет особое назначение в классах Java. Он не является обязательным для класса, но если мы хотим чтобы класс запускался на исполнение –этот метод обязателен и формат его объявления должен быть всегда следующим =public static void main(String[] args)=(по ключевым словам в строке объявления поговорим позже). На самом деле, когда мы выполняем в терминале команду =java Human Петров = выполняется эквивалентная ей команда =java Human.main Петров =, при этом =Петров= является параметром, который записывается в массив args(строка 1.39) и передается в метод main. Конкретно в этом случае, первый элемент массива args[0] будет равен “ Петров”(нумерация элементов массива ведется с 0-индекса).

Структура класса

 

На выше приведенном примере класса рассмотрим основные элементы структуры класса Java.

Объявление класса начинается со строки, в которой присутствует ключевое слово class и название класса. Java- регистрозависимый язык, поэтому классы с названиями Human и HuMan – это разные классы. Тело класса, все его структурные части заключены между фигурными скобками {}(строки 1.9,1.54). Обычно над объявлениями класса размещается информация о необходимых импортах и пакетах(информацию о пакетах см. ниже). В теле класса возможны следующие структурные элементы:

атрибуты класса (их иногда называют полями или свойствами класса). Их полным набором будет обладать любой экземпляр данного класса. В случае Human, каждый экземпляр этого класса будет иметь следующие свойства - фамилию, возраст, адрес проживания, день рождения, идентификационный код. Пример атрибутов- строки 1.10-1.14 Свойства класса должны отражать реальные свойства объектов моделируемой системы. Объявление атрибута класса ничем не отличается от обычной переменной- первоначально указывается модификатор доступа(в случае отсутствия его явного задания уровень доступа к свойству – дефаултовый (па-кетный)). Далее указывается тип данных, которые будут хранится в переменной.Затем указывается идентификатор или другими словами имя атрибута класса. В Java идентификаторы могут содержать буквы и цифрры(подчеркивание и $ разрешены), длина не ограничена. Имена атрибутов должны отражать их связь со свойствами реальных объектов. Пример:

строка 1.11 - private int age;, где private- модификатор доступа, int- тип данных, которые будут храниться в атрибуте с именем age.

 

конструкторы класса -это структурный элемент, отвечающий за правильность процедуры создания экземпляров класса. Обычно в конструкторах производят корректную инициализацию свойств создаваемых экземпляров. Количество конструкторов в классе не ограничено. Конструктор без параметров называют конструктором по умолчанию. Он создается автоматически, даже если не задан явно программистом, но только в случае, если в классе программист не создал ни одного конструктора. Если у нас есть хотя бы один конструктор, и есть необходимость в конструкторе без параметров, то мы должны его задать в коде самостоятельно. Особенности задания – конструктор всегда называется точно так же как сам класс. Использование при описании класса нескольких конструкторов с различными параметрами называется перегрузкой конструкторов. Пример – строка 1.21, 1.29, 1.16. При создании экземпляра класса (с использованием оператора new строка 1.40, 1.41) мы можем использовать только те конструкторы, параметры которых соответствуют, описанным в классе. Пример - я не могу,например, создать экземпляр класса Human командой = Human h123=new Human(23,45,”Сидоров”) =, т. к. у нас в описании класса нет ни одного конструктора с данной последовательностью и типом параметров – int, int, String.

Инициализаторы или блоки статической инициализации – их пока не рассматриваем.

Методы класса – в этой части сосредоточено поведение класса, то что каждый экземпляр класса умеет делать для других (внешний интерфейс) и то, что он делает для поддержания своей внутренней целостности и непротиворечивости(внутренний интерфейс). В рассматриваемом классе Human описаны следующие методы- getAdress() -1.32, setAdress(String adress)-1.35, main(String[] args) -1.39, toString() – 1.48 Они все относятся к внешнему интерфейсу класса т.к. имеют модификатор доступа public.

Остановимься чуть подробнее на синтаксисе объявления методов. Введем понятие сигнатуры метода- это совокупность имени метода, типов и количества параметров, а так же порядка параметров в описании метода. Понятие сигнатуры важно по причине того, что в классе не могут быть два метода с одинаковой сигнатурой. Это контролирует компилятор. Пример – компилятор не разрешит создание в одном классе методов one(String str, int var1) и one(String qwe, int sde) (докажите, что сигнатуры этих методов одинаковы), но разрешит создание методов one(String str1, int var1, Date d1), one(String str1,int var1) и one(Date d1,String str1,int var1) (докажите что сигнатуры методов различны для этих 3 методов). Наличие в классе нескольких методов с одинаковыми именами называется перегрузкой методов. Отдельная группа методов – это так называемые set-еры и get-еры. Это специлизированные методы, которые предназначены для считывания (get-еры) и модификации (set-еры) атрибутов класса. При этом атрибуты класса делают скрытыми от внешних клиентов (уровень доступа private).Доступ к этим атрибутам класса предоставляется через public- методы, пример getAdress() -1.32, setAdress(String adress)-1.35

Обратите внимание на параметр в описании модифицирующего метода – в этом методе в качестве параметра передается значение, которое необходимо присвоить атрибуту adress.

Порядок объявления метода следующий- модификатор доступа, тип возвращаемого значения, наименование метода и в скобках через запятую список параметров метода, с указанием типа и названия параметров.

Пример:

Строка 1.35 public void setAdress(String adress), где public – модификатор доступа, void – тип возвращаемого значения(void обозначает, что метод ничего не возвращает), setAdress(String adress) – название метода, в качестве параметра используется любая переменная, тип которой String.

 

Пакеты в Java.

Классы в Java располагаются в пакетах. Полное имя класса складывается из имя_пакета_1.имя_пакета_2.имя_пакета_n.имя_класса. Для класса Human полное имя - javaapplication38.Human. Каждому пакету соответствует дирректория в файловой системе с таким же именем. Соответственно, все классы данного пакета будут расположены в дирректории с таким же именем. Пакеты могут быть вложенными друг в друга. Вложенным пакетам соответствуют вложенные дирректории. Для указания о том, что пакет принадлежит определенному пакету служит инструкция package javaapplication38;(строка 1.1) Причина по которой в Java применяются пакеты – снижение рисков возникновения конфликтов имен классов, при использовании внешних библиотек. Для того, чтобы не писать полное имя класса, каждый раз при использовании классов из другого пакета в нашем классе, существует команда import. Пример – строка 1.2 – это импорт конкретного класса Date из пакетов java.util. Конструкция import java.util.* даст пользоваться короткими именами всех классов пакета java.util. Но это не касается классов, которые находятся во вложенных пакетах, пакета java.util.

 

 

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

 

В Java предусмотрено 4 вида модификаторов – public, protected, default(или пакетный, при этом ключевого слова для данного уровня доступа не предусмотрено см. Строку 1.10) и последний тип – private. Наличие различных модификаторов доступа обусловлено необходимостью реализовать в языке одну из важнейших особенностей ООП- инкапсуляцию. Инкапсуляция предполагает разделение поведения и свойств(атрибутов) классов на внешние, доступные другим классам, и внутренние, о которых внешним классам ничего не известно. Цель инкапсюляции- уйти от зависимости внешнего интерфейса класса(то, что могут использовать другие классы) от реализации. Чтобы малейшее изменение в классе не влекло за собой изменение внешнего поведения класса. Соответственно, максимально открытый уровень доступности – это public, максимально защищенный уровень – это private.

Public-уровень предполагает доступ к компоненту с этим модификатором из экземпляра любого класса и любого пакета.

Protected - уровень предполагает доступ к компоненту с этим модификатором из экземпляров родного класса и классов-потомков, независимо от того в каком пакете они находятся.

Default-уровень предполагает доступ к компоненту с этим модификатором из экземпляров любых классов, находящихся в одном пакете с этим классом.

Private- уровень предполагает доступ к компоненту с этим модификатором только из этого класса.

Для разных структурных элементов класса предусмотрена возможность применять только определенные уровни модификаторов доступа.

Для класса- только public и default.

Для свойств(атрибутов) класса – все 4 вида.

Для конструкторов – все 4 вида.

Для методов- все 4 вида.

 

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

 

Механизм наследования в первую очередь снижает семантическую сложность программируемой задачи и позволяет экономить время разработчиков и делает возможным безопасное многоразовое использование одного кода в разных сегментах программируемой системы или даже в разных системах. Пример из окружающей жизни- есть класс Транспорт – у любого транспортного средства есть такие свойства, как максимальная скорость, максимальная дальность перемещения, максимальная грузоподьемность и поведение обусловленое, тем, что главная задача любого транспортного средства - перемещать грузы на расстояния, от пункта отправки в пункт назначения(свойства и поведение, которые мы выделяем у объектов, рассматриваемых в модели, определяются теми задачами, которые должна помочь нам решить модель). Существуют такие виды транспорта, как Воздушный, Водный, Железнодорожный и т.д. К примеру любой представитель Водного транспота обладает всеми свойствами и поведением класса Транспорт, но кроме того расширяет его новыми свойствами и поведением – например водоизмещением, порт прописки, численность экипажа (свойства) и двигаться по курсу,оказать помощь тонущим(поведение). В свою очередь Водный транспорт может иметь наследников Морской транспорт и Речной транспорт, которые будут иметь все доступные свойства и поведение своих предков(Транспорта и Водного транспорта) + добавят, что-то присущее только объектам данного типа. В этом случае говорят, что класс Транспорт – является корневым классом данной иерархии классов, а все остальные классы наследниками этого класса. Классы, расположенные на самом нижнем уровне наследования, которые не имеют наследников, называют листовыми классами(Это Морской и Речной в нашем случае).

Синтаксис наследования для классов прост - public class Student extends Human, эта строка говорит нам о том, что класс Студент наследуется от класса Человек. В Java,возможно, только одиночное наследование. Все классы в Java являются наследниками от класса Object. Поэтому, используя ключевое слово extends, необходимо помнить о том, что в этом случае всегда есть как минимум 2 класса предка - Object и класс, указанный после ключевого слова extends.

 

Интерфейсы.

 

Объявление интерфейса по синтаксису аналогично объявлению класса, с тем отличием, что вместо ключевого слова class используется слово interface. Пример, связанный с начальной моделью(интерфейс Учебный), приведен ниже:

Листинг 5.

5.1 public interface Navchalny {

5.2 String var_interf_navchal="Це змінна інтерфейсу Navchalny";

5.3 public boolean navchatys(String oblast_dialnosty, int time);

5.4 public float get_riven_maysternosty(String oblast_dialnosty);

5.5 }

Обратите внимание на то, что в интерфейсах отсутствует реализация объявленных методов. В интерфейсах могут использоваться, так называемые интерфейсные переменные (строка 5.2) Главное свойство этих переменных – они всегда являются константами и статическими(хотя это не видно в объявлении). Соответственно,синтаксис обращения к ним следующий – имя_интерфейса.имя_переменной. В нашем случае- Navchalny.var_interf_navchal

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

Листинг 6.

6.1 public interface Plavalnyi extends Sportyvny {

6.2 public void plavaty(int distancia);

6.3 }

При этом в отличии от классов допускается множественное насследование(все интерфейсы-предки перечисляются через запятую).

 

Обработка иключений.

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

 

Листинг 10.

1. package javaapplication38;

 

2. /**

3. *

· @author Nezdoliy

4. */

5. public class Example_exception {

 

6. public static void main(String[] args) {

7. Example_exception.metod1(0);

8. }

9. public static void metod1(int par1){

10. int b=5/par1;

11. }

12. }

При запуске данного кода мы увидим следующее сообщение в консоли.

 

 

Exception in thread "main" java.lang.ArithmeticException: / by zero

at javaapplication38.Example_exception.metod1(Example_exception.java:10)

at javaapplication38.Example_exception.main(Example_exception.java:7)

 

Обработчик по умолчанию показал, что в программе произошла попытка деления на ноль, был создан объект типа java.lang.ArithmeticException (при этом была показана вся последовательность вызовов до строки в методе, которая непосредственно вызвала исключение). Так отрабатывает обработчик по умолчанию.

Если мы хотим по своему обработать данную ошибку, то это может делаться следующим образом. Пример обработки:

 

Листинг 11.

1. package javaapplication38;

 

2. /**

3. *

· @author Nezdoliy

4. */

5. public class Example_exception {

 

 

6. public static void main(String[] args) {

7. Example_exception.metod1(0);

8. }

9. public static void metod1(int par1){

10. try{

11. int b=500/par1;

12. System.out.println("Переменная b = "+b);

13. } catch (ArithmeticException e) {

14. System.out.println("В связи с некорректным входным параметром произведена " +

· "его замена на параметр по умолчанию");

15. metod1(5);

16. }

17. }

18. }

 

Сообщение, которое мы получим на консоли, при запуске данной программы, следующее:

 

В связи с некорректным входным параметром произведена его замена на параметр по умолчанию

Переменная b = 100

 

Таким образом если предполагается возникновение исключения на каком-то участке кода,это код располагается в блоке try-catch (смотри строку 10-13 Листинга 11) При возникновении исключения, создается объект типа Throwable и управление передается блоку catch или finally(в данном случае catch, по finally пример будет ниже). В блоке catch в качестве параметра указывается любой тип, суперклассом которого является класс Exception(строка 13,для этого класса суперклассом является класс Throwable) и далее код, который должен выполняться при возниконвении исключения. Если тип возникшего исключения может быть приведен к тому типу, который указан в параметре блока catch, или точно ему соответствует, то код блока catch выполняется. Если нет, то выполняется блок finally и управление передается обработчику исключений верхнего уровня. Если соответствующий обработчик не будет найден, тогда эту ситуацию перехватит обработчик по умолчанию.

Существует еще две конструкции, которые используются при обработке исключительных ситуаций. Это конструкция throw и throws. Первая конструкция используется в тех случаях, когда разработчик считает необходимым принудительно вызвать исключительную ситуацию(например, когда какие-либо переменные принимают значения допустимые для данного типа данных, но ошибочных с точки зрения логики программы. Переменная, в которой хранится температура пациента (тип float), принимает значение >41,9) Вторая конструкция применяется в тех случаях, когда разработчик по каким-то причинам не считает возможным произвести перехват и обработку исключительной ситуации, и предлагает это сделать своим коллегам.

 

Многопоточность.

Создать новый поток управления в Java возможно 2 способами. Либо сделав класс наследником от класса

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

Листинг 13

 

 

Приложение 1

№ варианта Лаборат. Работа № 1 (задания) Лаборат. работа № 2 (задания) Лаборат. Работа № 3 (задания) Лаборат. Работа № 4 (задания) Лаборат. Работа № 5 (задания) Лаборат. Работа № 6 (задания)
    16,17,18,19,20 25,27,28,30,32 54,37,46   61,65,71,59,75 104,90,93,96,99
  4,6,7,10,13 23,34,25,31,35 50,42,44   75,68,59,64,71 102,92,95,100,97
  3,7,6,10,12 24,27,31,33,37 57,40,45   77,71,62,58,67 103,91,94,98,105
  1,2,3,4,5 21,25,27,35,37 53,45,48   73,65,69,75,62 88,107,90,98,101
  1,2,8,11,19 25,27,28,31,34 56,39,41   76,70,67,65,61 99,95,97,89,107
  1,5,9,11,18 21,24,27,30,32 55,38,43   68,58,75,61,71 90,105,104,99,97
  2,4,6,8,10 25,26,29,31,36 39, 56, 44   70,60,77,62,68 106,88,91,94,100
  20,18,16,5,9 28,29,30,32,36 47,39,51   58,61,64,76,69 107,97,93,90,102
  5,9,11,13,19 22,25,29,33,36 38, 57, 45   65,74,69,62,73 89,106,100,95,91
  6,7,8,9,10 24,26,31,33,37 42, 53, 55   66,76,71,77,60 105,89,92,95,99
  11,12,13,14,15 22,26,28,31,36 52,44,50   72,64,58,61,74 91,104,93,99,101
  12,14,16,18,20 21,22,29,31,35 46, 49,37   67,77,60,59,61 92,103,88,100,94
  2,4,12,7,16 22,25,27,31,35 40, 55, 46   60,63,73,75,65 94,101,97,98,106
  11,13,15,17,19 23,25,31,35,37 45,50,48   64,72,58,61,69 93,102,95,96,102
  1,4,6,8,15 24,26,28,33,37 49,41,57   62,68,70,64,67 98,96,90,91,97
  3,6,9,12,15 24,27,31,34,37 43, 52,40   71,63,66,69,73 95,100,88,90,92
  12,14,4,6,10 23,26,28,32,35 51,43,53   69,59,61,63,76 97,98,103,107,89
  2,5,8,14,13 23,26,30,33,37 44, 51,49   59,60,77,71,63 101,93,88,106,95
  7,9,14,16,20 21,25,27,32,34 41, 54, 49   74,67,70,60,63 96,99,93,105,101
  3,8,14,15,5 23,25,29,30,34 48, 40,46   63,70,59,64,72 100,94,96,98,103

 

 

Список, практических заданий к лабораторным работам.

 

Содержание задания Баллы
  Создайте пример реализации классом двух интерфейсов одновременно. Продемонстрируйте в коде основные свойства интерфейсных переменных.  
  Создайте пример, в котором класс реализует интерфейс, который унаследован от др. интерфейса. Продемонстрируйте работу с интерфейсными переменными.  
  Для модели, отражающей взаимоотношения объектов Транспорт, Воздушный транспорт,Морской транспорт, Железнодорожный транспорт,Яхты, Реактивные самолеты,Винтовые самолеты, Дирижабли,Электровозы,Дизельные тепловозы и т.д.(не более 3 уровней наследования) продемонстрируйте основные преимущества использования наследования.  
  Создайте пример, выводящий на экран, все параметры командной строки 3-мя способами, используя разные управляющие конструкции.  
  Создайте статический метод, выводящий строку, переданную, как параметр, в обратном порядке на консоль.  
  Создайте тестовый класс, демонстрирующий работу не менее 10 методов класса String и всех конструкторов этого класса.  
  Создайте иерархию классов с 3-мя уровнями наследования, с вызовом в листовом классе(в одном из методов) родительского метода. Покажите на тестовых примерах на что влияет переопределение метода toString() для любого из уровней. Покажите для чего используется ключевое слово super() при переопределении методов.  
  Создайте пример, в котором в методе класса в качестве параметра исп. Интерфейс и покажите работу данного метода с несколькими классами, реализующими интерфейс-параметр.  
  Создайте пример, показывающий все особенности работы конструкторов при наследовании. Покажите на примерах, в каких случаях используется ключевое слово super() в конструкторах, а в каких возможно обойтись без него.  
  Продемонстрируйте в коде целесообразность использования специальных методов для доступа к атрибутам класса, а не прямого обращения к этим атрибутам. Покажите применение конструкции this() в коде.  
  Создать пример с использованием ключевого слова =final= и показать, как его использование воздействует на элемент, к которому применяется (класс, атрибут, метод). Продемонстрируйте отличие синтаксиса вызова обычных методов и статических методов.  
  Создайте пример, демонстрирующий синтаксис вызова в одном из методов класса др. метода этого же класса, а так же переопределите в этом классе один из методов класса-предка.  
  На иерархии классов произвольной предметной модели, продемонстрируйте в коде полиморфизм с использованием наследования  
  Создайте пример, демонстрирующий работу всех модификаторов доступа, применительно к атрибутам класса.  
  На произвольном наборе классов, реализующих созданный вами интерфейс, продемонстрируйте в коде полиморфизм с использованием этого интерфейса.  
  На примере иерархии наследования для объектов Фигура, Треугольник, Квадрат, Круг продемонстрируйте в коде переопределение методов и перегрузку конструкторов.  
  Создать пример, демонстрирующий то, какие части метода составляют сигнатуру метода в java. В этом же коде продемонстрировать перегрузку конструкторов и методов.  
  Создайте класс с несколькими статическими методами, позволяющими выполнять все арифметические дествия над целыми числами(+-/*) и продемонстрируйте работу этих методов.  
  Продемонстрируйте в коде взаимоотношение между классами =часть-целое= (агрегацию и композицию).  
  Продемонстрируйте в коде преобразование всех простых типов данных в String и обратно.  
  Продемонстрируйте в коде перехват в блоке try-catch нескольких исключений, покажите как иерархия наследования исключений влияет на порядок перехвата исключений в многострочном блоке catch  
  Продемонстрируйте при перехвате исключения ArithmeticException, возможность устранить ошибку в данных и продолжить выполнение программы.  
  Создайте метод, возвращающий сумму произвольного количества чисел от 1 до 10, переданных в качестве строковых параметров метода, в формате –“один”,“семь” и т.д. Т.о. сигнатура метода может выглядеть sum(String … slagaem). Организуйте контроль входных данных.  
  Создайте тестовый класс, демонстрирующий все возможные способы объявления и инициализации массивов.  
  Создайте метод, позволяющий вывести на экран информацию о каждом элементе одномерного массива, содержащего любые объекты, реализующих интерфейс MyInterface().  
  Создайте класс,имеющий следующие методы - метод, возвращающий сумму всех цифр числа(любого цифрого типа данных) - метод, возвращающий сумму всех цифр числа, являющихся четными - метод, возвращающий сумму всех цифр числа,меньших 2-го параметра метода  
  Создайте свой класс исключений и организуйте его перехват. В тестовом классе покажите обработку этого исключения.  
  Создайте метод, преобразующий одномерный массив данных любого ссылочного типа, в двумерный, заданной размерности.  
  Создайте 2 метода, подсчитывающий сумму всех элементов одномерного и двумерного массива, кратных определённому числу. При этом массив и число-кратное должны передаваться, как параметры методов.  
  Создайте тестовый класс, демонстрирующий работу всех управляющих конструкций в Java(все формы if,for,while,switch, break,continue,метки)  
  Продемонстрируйте в коде 2 способа обработки исключительных ситуаций в методе (с try-catch и throws), а также особенности использования блока finally. В качестве обрабатываемого исключения перехватите ошибку деления на 0.  
  Создайте метод, позволяющий проинициализировать одномерный массив.Массив инициализируется значениями, которые рассчитываются, как линейная функция от индекса элемента. Алгоритм инициализации должен передаваться как параметр метода.  
  Напишите код для генерации и поимки ArrayIndexOutOfBoundsException, ArithmeticException, NullPointerException, IndexOutOfBoundsException, Exeption.  
  Создайте тестовый класс, демонстрирующий работу не менее 15 методов класса Arrays  
  Продемонстрируйте в коде перехват 5 видов исключительных ситуаций.  
  Создайте метод, позволяющий в двумерном массиве поменять местами строки и столбцы.  
  Создайте методы, позволяющие вычислять сумму всех столбцов, сумму всех строк двумерного массива, сумму элементов конкретной строки, конкретного столбца. Продемонстрируйте повторное использование кода.  
  Продемонстрируйте в коде возбуждение и перехват исключительной ситуации в том случае, когда один из атрибутов класса принимает определенное значение.  
  Создайте приложение с главной формой, имеющее меню, которое позволяет создавать дочерние формы. Кроме того, в меню должны быть пункты позволяющие добавлять на активную форму 3 любых графических компонента. При этом для добавляемых элементов реализовать возможность перемещения их по форме.  
  Создайте тестовую форму, с использованием класса JApplet, продемонстрируйте на ней возможность добавления,удаления в компоненты JTable,JComboBox, JList пользовательских данных. Обязательно продемонстрируйте использование регулярных выражений для валидации данных, вводимых пользователем.  
  Создайте форму, на которой с помощью компонента JButton,вы реализуете возможность добавлять и удалять элементы в компонент JcomboBox Обязательно продемонстрируйте использование регулярных выражений для валидации данных, вводимых пользователем.  
  Создайте тестовую форму, позволяющую контролировать правильность ввода даты в поле редактирования. При этом должна быть возможность менять во время работы формат даты(например формат дд.мм.гггг на дд/мм/гггг Обязательно продемонстрируйте использование регулярных выражений для валидации данных, вводимых пользователем.  
  Создайте из 3 JcheckBox семафор, при котором может быть выбран только один управляющий элемент из 3.В зависимости от пользовательского выбора должен меняться цвет фона формы(красный, желтый, синий).  
  На форме расположите компонент JTextArea. Дайте возможность осуществлять поиск в тексте, которых набран в этой области комбинации букв и найденные комбинации подсвечивать другим цветом. Используйте механизм сериализации для сохранения данных.  
  Создайте форму, предоставляющую доступ к модификации содержимого класса ArrayList<String>.Должна быть возможность удалить элемент,добавить элемент, отредактировать.Содержание коллекции после каждой операции должно отображаться на форме в графическом элементе JList. Используйте механизм сериализации для сохранения данных. Тип данных добавляемый в коллекцию- емейлы. Обязательно продемонстрируйте использование регулярных выражений для валидации данных, вводимых пользователем.  
  Создайте форму,на которой выведите информацию по автомобилям автосалона в компонент JTable. При этом одна из колонок, должна содержать компоненты JCheckBox, состояние, которых должно характеризовать продан автомобиль или нет.  
  Создайте тестовую форму, демонстрирующую все возможности компонента Jspinner.  
  Создайте форму, предоставляющую доступ к модификации содержимого класса Stack<String>.Должна быть возможность удалить элемент,добавить элемент, отредактировать.Содержание коллекции после каждой операции должно отображаться на форме в графическом элементе JTextArea. В коллекции должны храниться даты в формате чч.мм.гггг. Обязательно продемонстрируйте использование регулярных выражений для валидации данных, вводимых пользователем.  
  Создайте форму позволяющую работать с классом Автомобиль, задавать все свойства и выводить текущую информацию о конкретном экземпляре класса Атомобиль. Обязательно продемонстрируйте использование регулярных выражений для валидации данных о дате изготовления автомобиля(формат мм/дд/гг), вводимых пользователем.  
  Создайте форму, предоставляющую доступ к модификации содержимого класса Vector<Student>.Должна быть возможность удалить элемент,добавить элемент, отредактировать.Содержание коллекции после каждой операции должно отображаться на форме в графическом элементе JTable. Используйте механизм сериализации для сохранения данных.  
  Расположите на форме компонент JTable c набором данных, отражающих успеваемость группы студентов по одному из предметов. Добавьте возможность фильтрации и сортировки данных по баллам или фамилиям. Кроме того выделяйте цветом строки, в которых балл ме


Поделиться:


Последнее изменение этой страницы: 2016-08-12; просмотров: 124; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.98.175 (0.013 с.)