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

СТО АлтГТУ 13.62.1.0667-2011

Лабораторная работа №3. Отношения между классами и объектами

Цель работы: получить практические навыки реализации отношений между классами и объектами на UML и Java. Научиться создавать пакеты и работать с пакетами в Java.

3.1 Пример создания отношения наследования между классами

В листинге 3.1 представлена программа, которая рассчитывает координаты для перемещения на плоскости геометрических фигур круг и треугольник. Для треугольника также выполняется масштабирование, а для круга – вычисление его площади. В программе описан абстрактный класс shape и на его основе производные классы – треугольник и круг. Программа выполнена в NetBeans IDE 7.3.1.

На рис. 3.1. показан состав проекта программы. Рисунок 3.2 демонстрирует результат выполнения программы, а рис. 3.4 – диаграмму классов UML. Диаграмма классов была составлена на основе кода программы с использованием плагина UML, установленного в NetBeans IDE 7.3.1. Для установки плагина необходимо добавить центр обновления для UML: Сервис/Подключаемые модули/Параметры настройки) и URL-адрес для плагина: http://deadlock.netbeans.org/hudson/job/uml/lastSuccessfulBuild/artifact/build/updates/updates.xml (рис. 3.3).

Рисунок 3.1 – Состав проекта программы

Листинг 3.1

// Shape.java

package shape;

// базовый класс фигура

public abstract class Shape

{ protected String type;

public Shape() { }

public Shape(String t) { type = t; }

public String GetShape() { return type; }

public abstract void Move(double x1, double y1);

}

// Treug.java

package shape;

// производный класс треугольник

public class Treug extends Shape

{ private double x, y, z;//длины сторон

public Treug(){ }

public Treug(String t, double x1, double y1, double z1)

{ super(t);

x = x1; y = y1; z = z1;

}

public String toString()

{ return type + ". Длины сторон: a = " + x + ", b = " + y + ", c = " + z;

}

//переопределение метода Move

public void Move(double x1, double y1)

{ String msg = "";

if ((x1 > 0) && (y1 > 0))

msg = "Треугольник передвинули на "

+ x1 + " вправо и на "+ y1 + " вниз";

if ((x1 > 0) && (y1 < 0))

msg = "Треугольник передвинули на "

+ x1 + " вправо и на " + Math.abs(y1) + " вверх";

if ((x1 < 0) && (y1 < 0))

msg = "Треугольник передвинули на " + Math.abs(x1)

+ " влево и на " + Math.abs(y1) + " вверх";

if ((x1 < 0) && (y1 > 0))

msg = "Треугольник передвинули на " + Math.abs(x1)

+ " влево и на " + Math.abs(y1) + " вниз";

System.out.println(type.toUpperCase()+ ". Результат перемещения: "

+ msg);

}

public void Scale(double f)//Масштабирование

{ x *= f; y *= f; z *= f;

String msg = "Новые длины сторон: " + x + " "

+ y + " " + z + " ";

System.out.println(type + ". Результат масштабирования: "

+ msg);

}

public double GetX() { return x; }

public double GetY() { return y; }

public double GetZ() { return z; }

}

// Circle.java

package shape;

// производный класс круг

public class Circle extends Shape

{ private double x, y, r;

public Circle(){ }

public Circle(String t, double x1, double y1, double r1)

{ super(t); x = x1; y = y1; r = r1; }

public String toString()

{return type + "Координаты центра: x = " + x + ", y = " + y + ", r = " + r;

}

//переопределение метода Move

public void Move(double x1, double y1)

{ x += x1; y += y1;

String msg = "Новые координаты центра " + x + " " + y;

System.out.println(type + ". Результат перемещения: " + msg);

}

public double GetSquare()//вычисление площади

{ return Math.PI * Math.pow(r, 2); }

}

// JavaApplication3.java

package javaapplication3;

import shape.*;

import java.util.Scanner;

public class JavaApplication3

{ public static void main(String[] args)

{ int pr;

double t1, t2, t3, t4, t5, t6;

System.out.println("1 - Задать круг");

System.out.println("2 - Задать треугольник");

Scanner in = new Scanner(System.in);

pr = in.nextInt();

Shape fig1, fig2;

Circle Cr1; //окружность

Treug Tr1; //треугольник

if (pr == 1)

{ System.out.println("Вв. координату центра x:");

t1 = in.nextDouble();

System.out.println("Вв. координату центра y:");

t2 = in.nextDouble();

System.out.println("Вв. радиус круга:");

t3 = in.nextDouble();

fig1 = new Circle("Окружность", t1, t2, t3);

System.out.println(fig1);

System.out.println("Передвинуть на x:");

t4 = in.nextDouble();

System.out.println("Передвинуть на y:");

t5 = in.nextDouble();

fig1.Move(t4, t5);

if(fig1 instanceof Circle)

{ Cr1=(Circle)fig1;

System.out.println(fig1.GetShape()+ ". Площадь: " + Cr1.GetSquare());}

}

if (pr == 2)

{

System.out.println("Вв. сторону a:");

t1 = in.nextDouble();

System.out.println("Вв. сторону b:");

t2 = in.nextDouble();

System.out.println("Вв. сторону c:");

t3 = in.nextDouble();

if ((t1>=t2+t3)||(t2>=t1+t3)||(t3>=t1+t2))

System.out.println("Нельзя построить треугольник!!!");

else

{ fig2 = new Treug("Треугольник", t1, t2, t3);

System.out.println(fig2);

System.out.println("Передвинуть на x:");

t4 = in.nextDouble();

System.out.println("Передвинуть на y:");

t5 = in.nextDouble();

System.out.println("Масштаб:");

t6 = in.nextDouble();

fig2.Move(t4, t5);

if(fig2 instanceof Treug)

{ Tr1=(Treug)fig2; Tr1.Scale(t6);}

}

}

}

}

Рисунок 3.2 – Результат выполнения программы

Рисунок 3.3 – Установка плагина UML

Рисунок 3.4 – Диаграмма классов UML

3.2 Задание 1

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

  1. Создать класс «Отрезок», содержащий информацию о конечных точках. На его основе создать класс «вектор». Написать методы, определяющий, являются ли отрезки параллельными, а векторы – сонаправленными.

  2. Создать класс «Многочлен первой степени». На его основе создать класс «Многочлен степени n» от одной переменной. Написать метод, вычисляющий значение многочлена для заданного аргумента.

  3. Создать класс «Издание», хранящий информацию об издательстве(наименование, адрес). На его основе создать класс «Журнал»(номер, название, список статей – массив). Написать метод, возвращающий список авторов статей.

  4. Создать абстрактный класс «Здание» (год постройки, тип: панельное, кирпичное, деревянное). На его основе создать класс «дом» (занимаемая площадь земли, количество квартир). Написать метод, вычисляющий максимальное количество домов, которое можно построить на площади заданного размера с заданным расстоянием между соседними домами.

  5. Создать абстрактный класс «Товар» (наименование, цена, дата выпуска). На его основе создать класс «Компьютер» (тип процессора, объём HDD, Наличие встроенного аудио). Написать методы: установка ПО заданного размера в мегабайтах, удаление ПО (при этом занятая память должна «освобождаться»)., вывод списка установленного ПО.

  6. Создать абстрактный класс «Товар» (наименование, цена, дата выпуска). На его основе создать класс «Автомобиль» (объём двигателя, расход бензина на 100 км, тип КПП, наличие сигнализации, госномер). Написать метод, определяющий минимальное количество дозаправок, необходимое чтобы проехать заданное расстояние. Количество бензина в начале пути задаёт пользователь в долях от объёма двигателя.

  7. Создать абстрактный класс «Товар» (наименование, цена, дата выпуска). На его основе создать класс «Мобильный телефон» (наличие Bluetooth, IR; поддержка mp3, наличие фото/видеокамеры, тип батареи, что закачено). Тип батареи – структура: тип, время подзарядки, время разрядки. Написать методы: закачка информации через Bluetooth/IR, если имеется (выбор Bluetooth/IR осуществляет пользователь); вывод информации о том, что закачено; метод, определяющий сколько раз в неделю надо подзаряжать телефон.

  8. Создать класс «Издание», хранящий информацию об издательстве (наименование, адрес). На его основе создать класс «Книга» (название, автор, список рассказов: массив, количество рассказов). Рассказ – структура: название, количество страниц. Написать метод для вывода содержания книги с указанием номеров страниц.

  9. Создать абстрактный класс «периферийное устройство» (наименование, тип интерфейса). На его основе создать класс «принтер» (тип, количество цветов, разрешение, количество чернил). Написать методы для «отправки на печать» документа, просмотра названия документа, отправленного на печать, вывода состояния принтера (занят/свободен). Написать метод, определяющий количество документов в очереди на печать. Документ – структура: название, количество чернил, необходимое для его печати.

  10. Создать абстрактный класс «периферийное устройство» (наименование, тип интерфейса). На его основе создать класс «dial-up модем» (тип, тип интерфейса, поддерживаемый протокол). Написать методы: дозвон до провайдера по заданному телефону; проверка состояния(соединение установлено/нет), сброс соединения, установка режима работы (передача/принятие файла) при установленном соединении.

  11. Создать класс «человек» (имя, возраст). На его основе создать класс «Ученик» (номер школы, оценки). Оценки задавать в виде перечисления: отличник/хорошист/балбес. Написать методы: перевод в другую школу, повышение IQ, получение поощрений, получение замечания. Написать метод, понижающий или повышающий IQ ученика на 1 уровень в зависимости от количества замечаний и поощрений.

  12. Создать класс «человек» (имя, возраст). На его основе создать класс «Абитуриент» (специальность, баллы по ЕГЭ). Написать метод, сравнивающий балл ЕГЭ с проходным на специальность. Определить, на какие специальности (наименование, проходной балл), он может поступить. Список специальностей хранить в массиве.

  13. Создать класс «человек» (имя, возраст). На его основе создать класс «Студент» (специальность, количество долгов, зачётная книжка: массив структур (предмет, оценка) ). Написать метод, добавляющий запись в зачётную книжку и, в зависимости от оценки, уменьшающий или увеличивающий количество долгов. Написать метод, печатающий текущее содержимое зачётной книжки.

  14. Создать класс «плавсредство» (тип, грузоподъемность). На его основе создать класс «парусный катамаран» (площадь парусности, длина, ширина, максимальная скорость ветра). Написать методы: уменьшение/увеличение площади парусности в зависимости от введённой скорости ветра. Вывод текущей площади парусности, постановка на якорь (при этом парусность становится равной 0).

Соседние файлы в папке Метод. ук. к л. р