Спасибо за урок! Посмотрел выложенные варианты решения и мне показалось, что в них задание выполнено не в полном объеме. Выкладываю свой вариант решения задачи: import java.util.Arrays; public class app { public static void main(String[] args) { DataGraph DGGG = new DataGraph (1,2,3,6); // Вносим исходные данные DGGG = new DataGraph (10,20,30,60); // Изменяем данные DGGG = new DataGraph (350,250,350,650); // Повторно изменяем данные } } class DataGraph { // Объявен класс DataGraph для хранения данных // для графика в виде массива вещественных чисел final int N = 4; // размерностью N элементов static double [] data; // массив для хранения чисел static Observer [] graphs = new Observer[3]; // массив для экземпляров классов LineGraph, BarGraph и ChartGraph public DataGraph (){ // пустой конструктор для создания экземпляра класса } public DataGraph (double x1,double x2,double x3,double x4){ // конструктор DataGraph для внесения вещ-х чисел data = new double[] {x1, x2, x3, x4}; // занесение вещ-х чисел в массив data Observer.update(graphs[0], graphs[1], graphs[2]); // вызов метода update() интерфейса Observer } // для перерисовки графиков через ссылки graphs public static double [] getData() { // публичный метод getData() возвращает ссылку на return data; // массив data где храняться вещ-е числа } } interface Observer { // интерфейс Observer с методом update() static void update(Observer LG,Observer BG,Observer CG) { // По методу update() происходит обновление данных и перерисовка графика. LG = new LineGraph(); // входными данными для метода являются ссылки graphs BG = new BarGraph(); CG = new ChartGraph(); } } class LineGraph implements Observer { // НЕ дочерний DataGraph класс (точки в графике соединяются линиями) public DataGraph dg = new DataGraph(); // ссылка на объект класса DataGraph LineGraph (){ dg.graphs[0] = this; // экземпляр класса LineGraph сохраняется в массив graphs класса DataGraph // Рисование графика. Данные беруться через публичный метод getData() (класса DataGraph) System.out.println("Рисуем линейный график. Данные для построения: " + Arrays.toString(dg.getData())); } } class BarGraph implements Observer { //См. описание class LineGraph (график в виде столбцов) public DataGraph dg = new DataGraph(); BarGraph (){ dg.graphs[1] = this; System.out.println("Рисуем график в виде столбцов. Данные для построения: " + Arrays.toString(dg.getData())); } } class ChartGraph implements Observer { // См. описание class LineGraph(график в виде круговой диаграммы) public DataGraph dg = new DataGraph(); ChartGraph (){ dg.graphs[2] = this; System.out.println("Рисуем график в виде круговой диаграммы. Данные для построения: " + Arrays.toString(dg.getData())); } }
хочу добавить один момент. могли бы вы потвердить, или опровергнуть следущее. подзказать или прокоментировать interface I1 { default void f1(){} } interface I2 { default void f1(){} } variant 1. OK если переопределить функцию в дочернем классе как ви и обьясняли. abstract class C1 implements I1{ } variant 2. ERROR надо переопределять функциу f1() abstract class C1 implements I1,I2{ }
@@selfedu_rus Ааа т.е приоритет в даном случае выше у перелпределения. Спасибо буду помнить. Вы не подумайте ничего плохого, у меня опыт с++ более 15 лет, а джава очень близка по духу, ваши уроки очень помогают. Я по всякому стараюсь объявить класс и т.д., поэтому появляются вопросы, а вы сами знаете, что все изюминки обычно не пишут в просторах а передаются из уст в уста :)
Домашку осилил! 🤣 самая тяжелая домашка до текущего времени, долго ломал голову, перебирал варианты, удивлялся и экспериментировал. Так как я ее делал прямо со скрипом, я напишу ниже мейн и классы и постараюсь описать, что делал и какая логика... мейн: DataGraph dataGraph = new DataGraph(1, 2, 3, 4); //создаем базу данных, задаем 4 значения для графиков в консоли: Данные внесены в базу: [1.0, 2.0, 3.0, 4.0] Создан объект линейного графика [1.0, 2.0, 3.0, 4.0] Создан объект Столбиковый график [1.0, 2.0, 3.0, 4.0] Создан объект Диаграмма [1.0, 2.0, 3.0, 4.0] -------------------------------------------------------------- мейн: включаем метод обновления с занесением новых значений, у DataGraph = итого теперь мейн выглядит так: DataGraph dataGraph = new DataGraph(1, 2, 3, 4); dataGraph.update(7,8,9,10); в консоли: Данные внесены в базу: [1.0, 2.0, 3.0, 4.0] Создан объект линейного графика [1.0, 2.0, 3.0, 4.0] Создан объект Столбиковый график [1.0, 2.0, 3.0, 4.0] Создан объект Диаграмма [1.0, 2.0, 3.0, 4.0] -------------------------------------------------------------- Выполняю обновление данных Создан объект линейного графика [7.0, 8.0, 9.0, 10.0] Создан объект Столбиковый график [7.0, 8.0, 9.0, 10.0] Создан объект Диаграмма [7.0, 8.0, 9.0, 10.0] -------------------------------------------------------------- Process finished with exit code 0 и так ниже будут классы, ибо мейн сделан для пользователя, чтобы ему удобно было (а не мне).
interface Observer { void update(double [] inter); } //выше интерфейс из задания, с методом апдейт, но принимающий на себя массив, для апдейта. Мы обязаны оверайдить во всех классах где будет внедрен интерфейс. class DataGraph { final int N = 4; //пусть у меня будет 4 размер массива а не 10 (лень) double data[] = new double[N]; //обьявил массив, длина = 4 Observer[] graphs = new Observer[3]; //создаем массив графс размером на 3 обьекта //ниже конструктор, принимаем 4 числа дабл, они лезут в наш масив ДАТА, заодно создадим графики и дадим им данные! DataGraph(double first, double second, double third, double fours) { data[0] = first; data[1] = second; data[2] = third; data[3] = fours; System.out.println("Данные внесены в базу: "+Arrays.toString(data)); graphs[0] = new LineGraph(data); graphs[1] = new BarGraph(data); graphs[2] = new ChartGraph(data); } //пустой конструктор нужен мне для создания простого ДатаГрафа без параметров. DataGraph() { } //метод обновления, принимает 4 числа дабл для изменения графиков, запускает Апдейт у них применяя getData() void update(double first, double second, double third, double fours) { System.out.println("Выполняю обновление данных"); data[0] = first; data[1] = second; data[2] = third; data[3] = fours; graphs[0].update(getData()); graphs[1].update(getData()); graphs[2].update(getData()); } //По Техзаданию, getData() дает данные, возвращая массив ДАТА тому кто спрашивает. public double[] getData() { // System.out.println("Сработала функция getData в классе DataGraph"); return data; } } //первый класс линейного графика, наследуемый от интерфейса, оверайдим его метод update() class LineGraph implements Observer { DataGraph dg; // создаем обьект датаграф, так как у нас нет наследования на класс, будем идти так. //этот метод берет данные из getData() в классе DataGraph, public void update(double [] inter) { dg = new DataGraph(); //создали dg.data = inter; //массив dg = массиву из параметров = летит в DataGraph = GetData LineGraph goUpdate = new LineGraph(dg.data); //клепаем график, с нашим массивом } //тут у нас конструктор класса, принимае на вход массив дабл, но можно и из других мест - передавать массив сюда LineGraph(double [] in) { System.out.println("Создан объект линейного графика "+Arrays.toString(in)); } } // остальные классы однотипны, ничего нового class BarGraph implements Observer { DataGraph dg; public void update(double [] inter) { dg = new DataGraph(); dg.data = inter; BarGraph goUpdate = new BarGraph(dg.data); } public BarGraph(double [] in) { System.out.println("Создан объект Столбиковый график "+Arrays.toString(in)); } } class ChartGraph implements Observer { DataGraph dg; public void update(double [] inter) { dg = new DataGraph(); dg.data = inter; ChartGraph goUpdate = new ChartGraph(dg.data); } public ChartGraph(double [] in) { System.out.println("Создан объект Диаграмма "+Arrays.toString(in)); System.out.println("--------------------------------------------------------------"); } }
@@лалала-т7в да код надо сокращать, но мы пока учимся писать код, и уже домашка тут очень тяжелая, предполагает уже опыт какой то... сижу ломаю голову над домашним заданием
жаль что не нашла у вас видео про лямбда выражения по Java, спасибо за уроки.
Спасибо! Очень полезно!) Это самый лучший урок по интерфейсам что я видел в сети!)
Теперь многое стало мне понятным) Спасибо)
блестящее видео, отличная работа!
Спасибо тебе большое, за твои уроки
Спасибо за урок!
Посмотрел выложенные варианты решения и мне показалось, что в них задание выполнено не в полном объеме. Выкладываю свой вариант решения задачи:
import java.util.Arrays;
public class app {
public static void main(String[] args) {
DataGraph DGGG = new DataGraph (1,2,3,6); // Вносим исходные данные
DGGG = new DataGraph (10,20,30,60); // Изменяем данные
DGGG = new DataGraph (350,250,350,650); // Повторно изменяем данные
}
}
class DataGraph { // Объявен класс DataGraph для хранения данных
// для графика в виде массива вещественных чисел
final int N = 4; // размерностью N элементов
static double [] data; // массив для хранения чисел
static Observer [] graphs = new Observer[3]; // массив для экземпляров классов LineGraph, BarGraph и ChartGraph
public DataGraph (){ // пустой конструктор для создания экземпляра класса
}
public DataGraph (double x1,double x2,double x3,double x4){ // конструктор DataGraph для внесения вещ-х чисел
data = new double[] {x1, x2, x3, x4}; // занесение вещ-х чисел в массив data
Observer.update(graphs[0], graphs[1], graphs[2]); // вызов метода update() интерфейса Observer
} // для перерисовки графиков через ссылки graphs
public static double [] getData() { // публичный метод getData() возвращает ссылку на
return data; // массив data где храняться вещ-е числа
}
}
interface Observer { // интерфейс Observer с методом update()
static void update(Observer LG,Observer BG,Observer CG) { // По методу update() происходит обновление данных и перерисовка графика.
LG = new LineGraph(); // входными данными для метода являются ссылки graphs
BG = new BarGraph();
CG = new ChartGraph();
}
}
class LineGraph implements Observer { // НЕ дочерний DataGraph класс (точки в графике соединяются линиями)
public DataGraph dg = new DataGraph(); // ссылка на объект класса DataGraph
LineGraph (){
dg.graphs[0] = this; // экземпляр класса LineGraph сохраняется в массив graphs класса DataGraph
// Рисование графика. Данные беруться через публичный метод getData() (класса DataGraph)
System.out.println("Рисуем линейный график. Данные для построения: " + Arrays.toString(dg.getData()));
}
}
class BarGraph implements Observer { //См. описание class LineGraph (график в виде столбцов)
public DataGraph dg = new DataGraph();
BarGraph (){
dg.graphs[1] = this;
System.out.println("Рисуем график в виде столбцов. Данные для построения: " + Arrays.toString(dg.getData()));
}
}
class ChartGraph implements Observer { // См. описание class LineGraph(график в виде круговой диаграммы)
public DataGraph dg = new DataGraph();
ChartGraph (){
dg.graphs[2] = this;
System.out.println("Рисуем график в виде круговой диаграммы. Данные для построения: " + Arrays.toString(dg.getData()));
}
}
Как по мне, великий подвиг даже попроще обычных. Меньше строчек кода, если я все правильно сделал конечно. Спасибо за урок)
Thank you very much for this amazing lesson!
Спасибо вам большое!
Добрый день. Каждый урок не только новые знания ,но и хорошее настроение .Главное доступно и понятно. СПАСИБО. Скажите практика будет?
Практика самостоятельная по подвигам в конце видео )
А в чем разница между интерфейсами и абстрактными классами?
Закончил вторую часть домашки, мейн:
// DataGraph dataGraph = new DataGraph(1, 2, 3, 4); //Устаревшие методы
// dataGraph.update(7,8,9,10); //устаревшее обновление
DataGraph.getInstance();
DataGraph.getUpdate(1,2,5,7);
DataGraph.getUpdate(2,12,15,17);
И так классы... в этот раз без обьяснений, думаю от первого урока не так много изменений, приват на все конструкторы, и метод статический на проверку и создание.
interface Observer {
void update(double [] inter);
}
class DataGraph {
static final int N = 4;
static double data[] = new double[N];
static Observer[] graphs = new Observer[3];
private static DataGraph instance;
public static synchronized DataGraph getInstance() {
if (instance == null) {
instance = new DataGraph();
}
return instance;
}
public static synchronized double[] getUpdate(double first, double second, double third, double fours){
data[0] = first;
data[1] = second;
data[2] = third;
data[3] = fours;
System.out.println("Данные внесены в базу: "+Arrays.toString(data));
graphs[0] = new LineGraph(data);
graphs[1] = new BarGraph(data);
graphs[2] = new ChartGraph(data);
return data;
}
private DataGraph(double first, double second, double third, double fours) {
data[0] = first;
data[1] = second;
data[2] = third;
data[3] = fours;
System.out.println("Данные внесены в базу: "+Arrays.toString(data));
graphs[0] = new LineGraph(data);
graphs[1] = new BarGraph(data);
graphs[2] = new ChartGraph(data);
}
private DataGraph() {
}
void update(double first, double second, double third, double fours) {
System.out.println("Выполняю обновление данных");
data[0] = first;
data[1] = second;
data[2] = third;
data[3] = fours;
graphs[0].update(getData());
graphs[1].update(getData());
graphs[2].update(getData());
}
public double[] getData() {
return data;
}
}
class LineGraph implements Observer {
public void update(double [] inter) {
LineGraph goUpdate = new LineGraph(inter);
}
public LineGraph(double [] in) {
System.out.println("Создан объект линейного графика "+Arrays.toString(in));
}
}
class BarGraph implements Observer {
public void update(double [] inter) {
BarGraph goUpdate = new BarGraph(inter);
}
public BarGraph(double [] in) {
System.out.println("Создан объект Столбиковый график "+Arrays.toString(in));
}
}
class ChartGraph implements Observer {
public void update(double [] inter) {
ChartGraph goUpdate = new ChartGraph(inter);
}
public ChartGraph(double [] in) {
System.out.println("Создан объект Диаграмма "+Arrays.toString(in));
System.out.println("--------------------------------------------------------------");
}
}
Моя реализация(все классы и интерфейс в разных файлах):
public class Main {
public static void main(String[] args) {
Observer[] graphs = new Observer[3];
graphs[0] = new LineGraph();
graphs[1] = new BarGraph();
graphs[2]= new ChartGraph();
graphs[0].draw();
graphs[1].draw();
graphs[2].draw();
double[] da = {12, 23, 45};
DataGraph.setData(da);
}
}
public final class DataGraph {
private static final int N = 3;
private static int count;
private static DataGraph dataGraph;
private static ArrayList graphs;
private static double[] data;
static {
count = 0;
graphs = new ArrayList();
}
{
data = new double[N];
}
private DataGraph(){
count++;
}
public static DataGraph getInstance(){
if(count < 1)
dataGraph = new DataGraph();
return dataGraph;
}
public double[] getData() {
return data;
}
public static void setData(double[] newData){
if(newData.length == N)
data = newData;
updateGraphs();
}
public static void setGraphs(Observer graph){
if(!graphs.contains(graph))
graphs.add(graph);
}
public static void updateGraphs(){
System.out.println("Обновленные графики: ");
for(Observer i: graphs)
i.update();
}
}
public interface Observer {
void update();
void draw();
}
public class LineGraph implements Observer{
private static double[] data;
private DataGraph dg;
static {
data = DataGraph.getInstance().getData();
}
{
dg = DataGraph.getInstance();
}
public LineGraph(){
DataGraph.setGraphs(this);
}
public void draw(){
System.out.printf("Рисование линии: ");
for(double i: dg.getData())
System.out.printf("%.2f ", i);
System.out.println();
}
@Override
public void update() {
dg = DataGraph.getInstance();
data = dg.getData();
draw();
}
}
public class BarGraph implements Observer{
private static double[] data;
private DataGraph dg;
static {
data = DataGraph.getInstance().getData();
}
{
dg = DataGraph.getInstance();
}
public BarGraph(){
DataGraph.setGraphs(this);
}
public void draw(){
System.out.printf("Рисование столбцов: ");
for(double i: dg.getData())
System.out.printf("%.2f ", i);
System.out.println();
}
@Override
public void update() {
dg = DataGraph.getInstance();
data = dg.getData();
draw();
}
}
public class ChartGraph implements Observer{
private static double[] data;
private DataGraph dg;
static {
data = DataGraph.getInstance().getData();
}
{
dg = DataGraph.getInstance();
}
public ChartGraph(){
DataGraph.setGraphs(this);
}
public void draw(){
System.out.printf("Рисование круговых диаграмм: ");
for(double i: dg.getData())
System.out.printf("%.2f ", i);
System.out.println();
}
@Override
public void update() {
dg = DataGraph.getInstance();
data = dg.getData();
draw();
}
}
хочу добавить один момент. могли бы вы потвердить, или опровергнуть следущее. подзказать или прокоментировать
interface I1 {
default void f1(){}
}
interface I2 {
default void f1(){}
}
variant 1. OK если переопределить функцию в дочернем классе как ви и обьясняли.
abstract class C1 implements I1{
}
variant 2. ERROR надо переопределять функциу f1()
abstract class C1 implements I1,I2{
}
Если в интерфейсах одинаковые методы по умолчанию его нужно обязательно переопределить в классе C1.
@@selfedu_rus Ааа т.е приоритет в даном случае выше у перелпределения. Спасибо буду помнить.
Вы не подумайте ничего плохого, у меня опыт с++ более 15 лет, а джава очень близка по духу, ваши уроки очень помогают. Я по всякому стараюсь объявить класс и т.д., поэтому появляются вопросы, а вы сами знаете, что все изюминки обычно не пишут в просторах а передаются из уст в уста :)
Домашку осилил! 🤣
самая тяжелая домашка до текущего времени, долго ломал голову, перебирал варианты, удивлялся и экспериментировал.
Так как я ее делал прямо со скрипом, я напишу ниже мейн и классы и постараюсь описать, что делал и какая логика...
мейн:
DataGraph dataGraph = new DataGraph(1, 2, 3, 4); //создаем базу данных, задаем 4 значения для графиков
в консоли:
Данные внесены в базу: [1.0, 2.0, 3.0, 4.0]
Создан объект линейного графика [1.0, 2.0, 3.0, 4.0]
Создан объект Столбиковый график [1.0, 2.0, 3.0, 4.0]
Создан объект Диаграмма [1.0, 2.0, 3.0, 4.0]
--------------------------------------------------------------
мейн: включаем метод обновления с занесением новых значений, у DataGraph = итого теперь мейн выглядит так:
DataGraph dataGraph = new DataGraph(1, 2, 3, 4);
dataGraph.update(7,8,9,10);
в консоли:
Данные внесены в базу: [1.0, 2.0, 3.0, 4.0]
Создан объект линейного графика [1.0, 2.0, 3.0, 4.0]
Создан объект Столбиковый график [1.0, 2.0, 3.0, 4.0]
Создан объект Диаграмма [1.0, 2.0, 3.0, 4.0]
--------------------------------------------------------------
Выполняю обновление данных
Создан объект линейного графика [7.0, 8.0, 9.0, 10.0]
Создан объект Столбиковый график [7.0, 8.0, 9.0, 10.0]
Создан объект Диаграмма [7.0, 8.0, 9.0, 10.0]
--------------------------------------------------------------
Process finished with exit code 0
и так ниже будут классы, ибо мейн сделан для пользователя, чтобы ему удобно было (а не мне).
interface Observer {
void update(double [] inter);
}
//выше интерфейс из задания, с методом апдейт, но принимающий на себя массив, для апдейта. Мы обязаны оверайдить во всех классах где будет внедрен интерфейс.
class DataGraph {
final int N = 4; //пусть у меня будет 4 размер массива а не 10 (лень)
double data[] = new double[N]; //обьявил массив, длина = 4
Observer[] graphs = new Observer[3]; //создаем массив графс размером на 3 обьекта
//ниже конструктор, принимаем 4 числа дабл, они лезут в наш масив ДАТА, заодно создадим графики и дадим им данные!
DataGraph(double first, double second, double third, double fours) {
data[0] = first;
data[1] = second;
data[2] = third;
data[3] = fours;
System.out.println("Данные внесены в базу: "+Arrays.toString(data));
graphs[0] = new LineGraph(data);
graphs[1] = new BarGraph(data);
graphs[2] = new ChartGraph(data);
}
//пустой конструктор нужен мне для создания простого ДатаГрафа без параметров.
DataGraph() { }
//метод обновления, принимает 4 числа дабл для изменения графиков, запускает Апдейт у них применяя getData()
void update(double first, double second, double third, double fours) {
System.out.println("Выполняю обновление данных");
data[0] = first;
data[1] = second;
data[2] = third;
data[3] = fours;
graphs[0].update(getData());
graphs[1].update(getData());
graphs[2].update(getData());
}
//По Техзаданию, getData() дает данные, возвращая массив ДАТА тому кто спрашивает.
public double[] getData() {
// System.out.println("Сработала функция getData в классе DataGraph");
return data;
}
}
//первый класс линейного графика, наследуемый от интерфейса, оверайдим его метод update()
class LineGraph implements Observer {
DataGraph dg; // создаем обьект датаграф, так как у нас нет наследования на класс, будем идти так.
//этот метод берет данные из getData() в классе DataGraph,
public void update(double [] inter) {
dg = new DataGraph(); //создали
dg.data = inter; //массив dg = массиву из параметров = летит в DataGraph = GetData
LineGraph goUpdate = new LineGraph(dg.data); //клепаем график, с нашим массивом
}
//тут у нас конструктор класса, принимае на вход массив дабл, но можно и из других мест - передавать массив сюда
LineGraph(double [] in) {
System.out.println("Создан объект линейного графика "+Arrays.toString(in));
}
}
// остальные классы однотипны, ничего нового
class BarGraph implements Observer {
DataGraph dg;
public void update(double [] inter) {
dg = new DataGraph();
dg.data = inter;
BarGraph goUpdate = new BarGraph(dg.data);
}
public BarGraph(double [] in) {
System.out.println("Создан объект Столбиковый график "+Arrays.toString(in));
}
}
class ChartGraph implements Observer {
DataGraph dg;
public void update(double [] inter) {
dg = new DataGraph();
dg.data = inter;
ChartGraph goUpdate = new ChartGraph(dg.data);
}
public ChartGraph(double [] in) {
System.out.println("Создан объект Диаграмма "+Arrays.toString(in));
System.out.println("--------------------------------------------------------------");
}
}
всеравно, уже сморю у разных учителей, пока тяжело понять зачем они))
Дабы сократить код
Такая же херня, сейчас сижу на ооп нужно реализовать через класс или интерфейс заполнение обьекта. Впринципе как без него это сдклать я представляю
@@лалала-т7в да код надо сокращать, но мы пока учимся писать код, и уже домашка тут очень тяжелая, предполагает уже опыт какой то...
сижу ломаю голову над домашним заданием
Что-то получилось, только не уверен, что правильно
Вот, СПОЙЛЕР
Первый файл >>
package interfaces.test.test3;
public class DataGraph {
double[] data;
Observer[] graphs = new Observer[]{new BarGraph(), new ChartGraph(), new LineGraph()};
double[] getData() {
return data;
}
}
interface Observer {
void update(double[] in);
void startLink(DataGraph dataGraph);
}
class LineGraph implements Observer {
DataGraph dataGraph;
@Override
public void update(double[] in) {
dataGraph.data = in;
System.out.println("Рисуем точки в графике соединяются линиями");
}
@Override
public void startLink(DataGraph dataGraph) {
this.dataGraph = dataGraph;
}
}
class BarGraph implements Observer {
DataGraph dataGraph;
@Override
public void update(double[] in) {
dataGraph.data = in;
System.out.println("Рисуем график в виде столбцов");
}
@Override
public void startLink(DataGraph dataGraph) {
this.dataGraph = dataGraph;
}
}
class ChartGraph implements Observer {
DataGraph dataGraph;
@Override
public void update(double[] in) {
dataGraph.data = in;
System.out.println("Рисуем график в виде круговой диаграммы");
}
@Override
public void startLink(DataGraph dataGraph) {
this.dataGraph = dataGraph;
}
}
Второй файл >>
package interfaces.test.test3;
import java.util.Arrays;
public class test3Start {
public static void main(String[] args) {
DataGraph dataGraph = new DataGraph();
dataGraph.graphs[0].startLink(dataGraph);
dataGraph.graphs[1].startLink(dataGraph);
dataGraph.graphs[2].startLink(dataGraph);
dataGraph.graphs[0].update(new double[]{1,3,4});
System.out.println(Arrays.toString(dataGraph.getData()));
dataGraph.graphs[0].update(new double[]{1,3,23});
System.out.println(Arrays.toString(dataGraph.getData()));
}
}