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

Министерство образования и науки РФ

Вологодский государственный технический университет

Кафедра Информационных систем и технологий

Отчет по теме:

Классы и интерфейсы в Java

Выполнил студент группы ИТ-31

Трифанов Д. А.

Проверил преподаватель

Вологда

2012

  1. Построить объектную модель предметной области, реализовав один интерфейс, два класса с отношением родитель-потомок, реализующими этот интерфейс и один класс для работы с ними. (13 вариант, с машинами).

(Список я еще не сделал, посмотрите пожалуйста первые 3, хотя бы их пока что засчитать

Напишите какие зачтены.)

package otchet2;

// здесь интерфейс и класс его описывающий.

public interface Auto {

public int getNomer(); // метод возвращающий номер машины

public String getColor();// возвращает цвет

public int getProbeg();// пробег

public void setNomer(int a); // задание номера

public void setColor(String a);// цвета

public void setProbeg(int a); // пробега

}

package otchet2;

import java.util.Scanner;

import otchet2.CarInfoWriter;

import otchet2.Ford;

public class AutoR {

/** узнал что можно ((класс) переменная).метод

* вот так писать только сегодня.

* Где же это было раньше, когда делал 3 лабу.)

*

*

* @param args

*/

public static void main(String[] args) {

Scanner sc= new Scanner(System.in);//для считывания данных

int ind=-1;// инидкатор какое действие выполнить

Licht [] x = new Ford[11]; // создание массива объектов и их иниц

for (int i=0; i<x.length; i++){

x[i]= new Ford();

}

CarInfoWriter.printHelp();// вывод, какие могут быть использованы

while (ind!=0) { // команды

System.out.println("Введите команду");

ind=sc.nextInt();

if (ind>=1 && ind<=10) {

// задание свойств объекта в массиве по индикатору

x[ind]=CarInfoWriter.fordInfoInput();

System.out.println("");

}

else if (ind==11) {

// поисковик

System.out.println("по какому признаку произвести поиск");

System.out.println("1-по номеру, 2-по цвету");

ind=sc.nextInt();

if (ind==1 ){

int Nomer, j=0;

System.out.println("Введите номер");

Nomer=sc.nextInt();

for (Licht f: x) {

if (f.getNomer()==Nomer) {

// вывод всех данных об объекте

CarInfoWriter.getAll(((Ford)f));

// и можно добавить еще строчки

// тех классов, коотрые потомки

// и тогда ищет по всем

System.out.println("_______________");

j++;

}

}

System.out.println("найдено "+j+" машин");

}

else {

String Color;

int j=0;

System.out.println("Введите цвет");

Color=sc.nextLine();

Color=sc.nextLine();

for (Auto f: x) {

if (f.getColor().equals(Color)) {

// вывод всех данных об объекте

CarInfoWriter.getAll(((Ford)f));

System.out.println("_______________");

j++;

}

}

System.out.println("найдено "+j+" машин");

}

}

}

}

}

package otchet2;

Import java.Util.Scanner;

// класс для вывода данных о машине.

public class CarInfoWriter {

public void getTypeCor(Ford a){

System.out.print("тип корпуса машины- ");

System.out.println(a.getTypeCor());

}

public void getFabric(Ford a){

System.out.print("Фабрика машины- ");

System.out.println(a.getFabric());

}

public void getSeries(Ford a){

System.out.print("Серия машины- ");

System.out.println(a.getSeries());

}

public void getNomer(Ford a){

System.out.print("Номер машины- ");

System.out.println(a.getNomer());

}

public void getColor(Ford a){

System.out.print("цвет машины- ");

System.out.println(a.getColor());

}

public void getProbeg(Ford a){

System.out.print("пробег машины- ");

System.out.println(a.getProbeg());

}

public static void getAll(Ford a){

System.out.print("цвет машины- ");

System.out.println(a.getColor());

System.out.print("Фабрика машины- ");

System.out.println(a.getFabric());

System.out.print("Номер машины- ");

System.out.println(a.getNomer());

System.out.print("пробег машины- ");

System.out.println(a.getProbeg());

System.out.print("Серия машины- ");

System.out.println(a.getSeries());

System.out.print("тип корпуса машины- ");

System.out.println(a.getTypeCor());

System.out.println("Форд");

}

public static void printHelp(){

System.out.println("команды");

System.out.println("цифры от 1-10 задание пар-ов машины");

System.out.println("цифра 11 поиск нужного автомобиля");

System.out.println("цифра 0 выход из программы");

}

public static Ford fordInfoInput(){

Ford a= new Ford();

Scanner sc= new Scanner(System.in);

System.out.println("задайте цвет машины");

a.setColor(sc.nextLine());

System.out.println("задайте фабрику машины");

a.setFabric(sc.nextLine());

System.out.println("задайте номер машины");

a.setNomer(sc.nextInt());

System.out.println("задайте пробег машины");

a.setProbeg(sc.nextInt());

System.out.println("задайте серию машины");

a.setSeries(sc.nextInt());

System.out.println("задайте тип кузова машины");

a.setTypeCor(sc.nextLine());

a.setTypeCor(sc.nextLine());

return a;

}

}

package otchet2;

public class Licht implements Auto {

private int nomer, probeg;// все переменные приватны

private String color="";

public int getNomer(){

return nomer;

}

public String getColor(){

return color;

}

public int getProbeg(){

return probeg;

}

public void setNomer(int a){

nomer=a;

}

public void setColor(String a){

color=a;

}

public void setProbeg(int a){

probeg=a;

}

}

package otchet2;

// потомок класса.

public class Ford extends Licht{

private String typeCor="", fabric="";

private int series;

public String getTypeCor(){

return typeCor;

}

public String getFabric(){

return fabric;

}

public int getSeries(){

return series;

}

public void setTypeCor(String a){

typeCor=a;

}

public void setFabric(String a){

fabric=a;

}

public void setSeries(int a){

series=a;

}

}

  1. Написать программу для демонстрации механизмов раннего и позднего связывания в Java. Для этого написать два класса, связанных отношением наследования и реализующим определенный интерфейс. В программе завести переменные всех трёх типов и вызвать у них перегруженный, перекрытый и статический методы. Определить, какие методы вызываются в каком случае. Проделать то же самое со свойствами.

package otchet2.zadacha2;

public class Svjazivanie {

/**Вот, вроде все.

*

* @param args

*/

public static void main(String[] args) {

/////////////////////////

// объекты класса родителя, потомка и интерфайса.

Potomok x= new Potomok();

Roditel y=new Roditel();

Interface z=new Roditel();

Roditel t=new Potomok();

////////////////////

System.out.println(Roditel.StaticR());// вывод из статического метода родителя.

System.out.println(Potomok.StaticP());// вывод из статического метода потомка.

// вызвать статический метод у интерфейса невозможно.

//////////

System.out.println(y.metodPr2());// вывод метода у родителя

System.out.println(x.metodPr2());// вывод этого же метода с переопределение у потомка.

/////////

System.out.println(x.metodPr1());// перегрузка у потомка

System.out.println(y.metodPr1(50));// перегрузка у родителя

////////

System.out.println(z.metodPr1(70));// перегрузка у интерфейса.

//////////////////////////////// Со свойствами.

System.out.println(x.x);// просто вызывается свойство данного класса

System.out.println(y.x);// просто вызывается свойство данного класса

System.out.println(z.y);// свойство интерфейса.

////////// Для родилетя указывающего на потомка.

System.out.println(t.metodPr2()); //Статика от родителя.

System.out.println(t.metodPr1(50));//ерегрузка тоже родителя

System.out.println(t.x);// Тоже родителя

}

}

package otchet2.zadacha2;

public class Roditel implements Interface {

int x=0;

int y=3;

// метод

public int metodPr1(int a, int b){

return a+b+x;

}

// его перегрузка.

public int metodPr1(int a){

return a;

}

public String metodPr2(){

return "метод вызван из класса родителя.";

}

// статик метод.

public static int StaticR(){

return 30;

}

}

package otchet2.zadacha2;

public class Potomok extends Roditel{

int x=5;

// перегрузка метода у родителя

public int metodPr1(){

return 14+x;

}

public static int StaticP(){

return 47;

}

public String metodPr2(){

return "метод вызван из класса потомка. "+super.metodPr2();

}

}

package otchet2.zadacha2;

public interface Interface {

public int metodPr1(int a, int b);

public String metodPr2();

public int metodPr1(int a);

int y=6;

}

  1. Используя иерархию из предыдущего задания определить тип связывания при вызове перекрытых методов. Для этого создать новую иерархию с одним перекрытым методом, использующим в качестве параметра классы и интерфейс из предыдущего задания. Определить, какие методы, когда вызываются.

package otchet2.zadacha3;

import otchet2.zadacha2.Interface;

import otchet2.zadacha2.Potomok;

import otchet2.zadacha2.Roditel;

public class Main {

/**

* В прошлый раз вы ее не прокомментировали

* Считаю, что вы ее засчитали.

* @param args

*/

public static void main(String[] args) {

Potomok x= new Potomok();

Roditel y=new Roditel();

Interface z=new Roditel();

TypeComm Type= new TypeComm();

TypeCommP TypeP= new TypeCommP();

System.out.println(TypeP.Int(z));// перегрузка

System.out.println(Type.Int(z));// перегруза

System.out.println(TypeP.Int(x));

System.out.println(TypeP.Rod(y));//перекрытие

System.out.println(Type.Rod(x));// перекрытие

}

}

package otchet2.zadacha3;

//import otchet2.zadacha2.Potomok;

import otchet2.zadacha2.Roditel;

public class TypeCommP extends TypeComm{

public int Int(Roditel b){

return 2;

}

public int Rod(Roditel a){

return 3;

}

}

package otchet2.zadacha3;

import otchet2.zadacha2.*;

public class TypeComm {

public int Int(Interface a){

return 0;

}

public int Rod(Roditel a){

return 1;

}

}

  1. Написать классы и интерфейс для хранения объектов в виде списка. Должны быть доступны операции добавления, удаления, проверки размера списка. Реализовать два способа хранения в виде массива и в виде связанного списка.

package otchet2.zadacha4;

import java.util.*;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]