русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Полиморфизм в java. Форматированный вывод

Задание

В качестве основы использовать исходный текст проекта предыдущей работы (см. здесь). Используя шаблон проектирования Factory Method (Virtual Constructor), расширить иерархию производными классами, реализующими методы для представления результатов в виде текстовой таблицы. Параметры отображения таблицы должны определяться пользователем.
Продемонстрировать замещение (переопределение, overriding), совмещение (перегрузка, overloading), динамическое назначение методов (позднее связывание, полиморфизм, dynamic method dispatch).

Обеспечить диалоговый интерфейс с пользователем.

Разработать класс для тестирования основной функциональности.
Использовать комментарии для автоматической генерации документации средствами javadoc.

 

Разработка программы

Реализуем классы, структура которых соответствует схеме в пункте иерархия.

Разработаем класс MainTest для проведения теста основной функциональности кода. Реализуем методы:
testCalc() – для проверки основной функциональности класса ViewTable.
testRestore() – для проверки корректности восстановления данных при сериализации.
В процессе разработки необходимо обеспечить прохождение всех тестов.

 

Используемые средства ООП

Метод называют абстрактным, если он имеет только объявление и не имеет реализации. Класс, содержащий абстрактные методы, называется абстрактным классом. Если класс содержит один или больше абстрактных методов, этот класс должен быть определен как abstract.

Все методы дочерних классов, совпадающие с объявлением сигнатуры в базовом, выполняют переопределение (замещение, overriding) и используют динамическое связывание. Если имя метода совпадает с именем метода базового класса, а аргументы различны, то это означает перегрузку (совмещение, overloading).

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

 

Иерархия и структура классов

Структура классов и схема их отношений:

 

Описание программы

При разработке классов используем наследование и композицию. При вызове методов объектов используется позднее связывание.

 

Текст програми

ViewTable.java

package ex03;
import java.util.Formatter;
import ex02.Item1;
import ex02.ViewResult;

/** ConcreteCreator
* шаблон проектирования
* Factory Method
* Вывод в виде таблицы
* @author Александр
*@version 1.0
*@see ViewResult
*/
public class ViewTable extends ViewResult{
/** Определяем ширину таблицы по умолчанию */
private static final int DEFAULT_WIGTH = 15;

/** Текущая ширина таблицы */
private int width;
private int a;
private int b;
private int p;

public ViewTable() {
width = DEFAULT_WIGTH;
}

public ViewTable(int wigth){
this.width = wigth;
}

public ViewTable(int width, int n){
super(n);
this.width = width;
}

public int setWidth( int width){
return this.width = width;
}

public int seta( int a){
return this.a = a;
}
public int setb( int b){
return this.b = b;
}
public int setp( int p){
return this.p = p;
}

public int getWidth(){
return width;
}

public int geta(){
return a;
}

public int getb(){
return b;
}
public int getp(){
return p;
}

private void outLine(){
for(int i = width; i>0 ; i--){
System.out.print('-');
}
System.out.print('\n');
}

private void outLineLn(){
outLine();
System.out.println();

}

private void outHeader(){
Formatter fmt = new Formatter();
fmt.format("%s%d%s%2$d%s%s","%",(width-4)/2,"s | %", "s | ","s\n");
System.out.printf(fmt.toString(),"x                ","y               ","p                ");
setWidth(50);
outLine();
}


private void outBody(){
Formatter fmt = new Formatter();
System.out.println(geta() + "                   " + getb() + "                  " + getp());
setWidth(50);
outLine();

Item1 item = new Item1();


//                           System.out.printf(item.getP());
}

/** Перегрузка метода суперкласса;
* устанавливает поле {@linkplain ViewTable#width} значением <b>width</b><br>
* Для объекта {@linkplain ViewTable} вызывает метод {@linkplain ViewTable#init(double stepX)}
* @param width новая ширина таблицы.
* @param stepX передается методу <b>init(int)</b>
*/
public final void init(int width, int stepX, int stepX2) { // method overloading
this.width = width;
init(stepX, stepX2);
}

                /** Переопределение (замещение, overriding) метода суперкласса;
* выводит информационное сообщение и вызывает метод суперкласса
* {@linkplain ViewResult#init(int stepX) init(int stepX)}<br>
* {@inheritDoc}
*/
public double init(int stepX, int stepX2) { // method overriding
super.init(stepX);
seta(stepX);
setb(stepX2);
stepX = 2*(stepX + stepX2);
setp(stepX);
return stepX;
}

               
/** Вывод элемента таблицы<br>{@inheritDoc} */
@Override
public void viewHeader() {
outHeader();
outLineLn();
}

                /** Вывод элемента таблицы<br>{@inheritDoc} */
@Override
public void viewBody() {
outBody();
}

                /** Вывод элемента таблицы<br>{@inheritDoc} */
@Override
public void viewFooter() {
outLineLn();
}
}

 

Main.java

package ex03;

import ex02.View;
import ex03.ViewTable;

/**Вычисление и отобрежение результатов
* Содержит реализацию статического метода main()
* @author Александр
* @version 3.0
* @see Main#main
*/
public class Main extends ex02.Main {

                /** Инициализирует поле {@linkplain LAB02.Main#view view} */
public Main(View view) {
super(view);
}

                /** Выполняется при запуске программы;
* вызывает метод {@linkplain LAB02.Main#menu menu()}
* @param args - параметры запуска программы
*/
public static void main(String[] args) {
Main main = new Main(new ViewableTable().getView());
//main.menu();
ViewTable i = new ViewTable();
i.init(1, 2);
i.viewHeader();
i.viewBody();
i.init(2, 3);
i.viewBody();
i.init(4, 5);
i.viewBody();

}
}

 

ViewableTable.java

package ex03;

import ex02.ViewableResult;
import ex02.View;

/** ConcreteCreator
* шаблон проектирования
* Factory Method
* Объявляет метод
* "фабрикующий" объекты
* @author Александр
*@version 1.0
*@see ViewableResult
*@see ViewableTable#getView()
*/
public class ViewableTable extends ViewableResult {
/** Создаёт отображаемый объект {@linkplain ViewTable} */
@Override
public View getView() {
return new ViewTable();
}

}

 

MainTest.java

package ex03;
import ex03.Main;
import java.io.IOException;
import junit.framework.TestCase;

/**Выполняет тестирование разработанного класса CalcT
* @author Александр
*/
public class MainTest extends TestCase {

/**проверка основной функциональности класса*/               
public void testCalcT(){
ViewTable calcP = new ViewTable();

calcP.init(1, 1);
assertEquals(4, calcP.getp(), .1e-1);
calcP.init(2, 2);
assertEquals(8, calcP.getp(), .1e-1);
calcP.init(3, 3);
assertEquals(12, calcP.getp(), .1e-1);
calcP.init(4, 4);
assertEquals(16, calcP.getp(), .1e-1);
calcP.init(5, 5);
assertEquals(20, calcP.getp(), .1e-1);
}
}

 

Результат тестирования:


Просмотров: 9796

Вернуться воглавление




Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.