Здравствуйте, aka50, Вы писали:
A>Здравствуйте, JITM, Вы писали:
A>Если уж докапываться до слов, по по полной.
A>"Куда он установил ссылку?". A>Изменить можно что-то (т.е. ссылку как некий объект, по этому я испльзовал слово указатель, A>как понятное тем, кто работал в С++, т.к. это некая переменная значением которой является A>ссылка на объект). Установить можно что-то куда-то... дык вот вопрос, куда установлена ссылка? A>Я понял как установлена на объект. Но она должна где-то хранится, вот в переменной типа "указатель" A>она и хранится.
A>И вообще, это все в любой более менее толстой книжке расписано и цитату выше приводили...
Я всё это прекрасно понимаю и те толстые книги читал, но вы либо сами запутались в своих рассуждениях либо не правильные слова выбираете для выражения своих мыслей!!!!
Ссылка это не обьект а значение обекта, ключевое слово значение!!! Да действительно в памяти она храниться как указательна некий созданый обьект.., но это по -моему понятно и ребёнку, так что зачем такой флейм было разводить что есть что не пойму , и при этом всём ещё и некоректно описано суть!!! Возможно вы и понимаете правильно, но раз так то и соизвольте так же писать а не то как написано выше!
Вот цытата из той толстой книги и так Еккель указывает что есть обьект и что есть ссылка, что бы вы больше не писали
т.е. ссылку как некий объект
:
Не бывает локальных объектов, бывают только локальные ссылки.
У ссылок есть "границы видимости", а у объектов их нет.
В Java программист не может управлять временем жизни объектов.
В Java нет средств (таких, как константы) для защиты объекта от изменений (например для защиты от негативных последствий использования дублирующих ссылок).
Здравствуйте, JITM, Вы писали:
JIT>Здравствуйте, aka50, Вы писали:
A>>Здравствуйте, JITM, Вы писали:
JIT>либо не правильные слова выбираете для выражения своих мыслей!!!!
Скорее всего. Попытался скрестить понятие "ссылка" из java, с понятием "указатель"
из С++ и еще это притянуть к понятию "примитивный". Согласен. Вышло криво.
Но выражения типа "установил ссылку" говорят либо опять же о неверно подобраных
словах либо о не полном понимании что есть ссылка.
Т.к. разговор шел в контексте того, что же передается "объект по ссылке" или
"ссылка на объект как значение", то думаю тут стоило написать не установил,
а "изменил ссылку", тогда и вопросов бы не было, т.к. понятно, что
было изменено _значение_ ссылки (как некого... некоей... в общем переменной).
JIT>Ссылка это не обьект а значение обекта, ключевое слово значение!!!
Простите, значение какого объекта? Integer myval = new Integer(1) — _значением_
чего является myval? (серьезно не понимаю, то ли тупой, то ли мы на разных языках
разговариваем)
In Java, Objects are passed by reference, and primitives are passed by value.
This is half incorrect. Everyone can easily agree that primitives are passed by value; there's no such thing in Java as a pointer/reference to a primitive.
However, Objects are not passed by reference. A correct statement would be Object references are passed by value.
The use of the word "reference" in Java was an incredibly poor choice (in my not-so-humble opinion...) Java has pointers, plain and simple. The designers of Java wanted to try to make a distinction between C/C++ pointers and Java pointers, so they picked another term. Under the covers, pointers are implemented very differently in Java and C/C++, and Java protects the pointer values, disallowing operations such as pointer arithmetic and invalid runtime casting.
Т.е. мой background в виде С++ мешает иногда общаться в java мире, т.к. скатываюсь на уровень реализации...
Здравствуйте, aka50, Вы писали:
A>Здравствуйте, JITM, Вы писали:
JIT>>Здравствуйте, aka50, Вы писали:
A>>>Здравствуйте, JITM, Вы писали:
JIT>>либо не правильные слова выбираете для выражения своих мыслей!!!! A>Скорее всего. Попытался скрестить понятие "ссылка" из java, с понятием "указатель" A>из С++ и еще это притянуть к понятию "примитивный". Согласен. Вышло криво. A>Но выражения типа "установил ссылку" говорят либо опять же о неверно подобраных A>словах либо о не полном понимании что есть ссылка. A>Т.к. разговор шел в контексте того, что же передается "объект по ссылке" или A>"ссылка на объект как значение", то думаю тут стоило написать не установил, A>а "изменил ссылку", тогда и вопросов бы не было, т.к. понятно, что A>было изменено _значение_ ссылки (как некого... некоей... в общем переменной).
+1 Вот сейчас совсем другое дело а ведь можем когда захочем ..
A>Простите, значение какого объекта? Integer myval = new Integer(1) — _значением_ A>чего является myval? (серьезно не понимаю, то ли тупой, то ли мы на разных языках A>разговариваем)
Навенрое на разных . .. Как пишут ,ещё раз упомяну толстые книги , в джаве мы спокойно можем говорить что оперируем обьектами не боясь о последствиях но на самом деле мы оперируем ссылками на них, а обьекты они одини(ну есть возможность дубликации, клонгирования , копирования или как то ещё это можно назвать) так вот вот эта операция new Integer(1) создала в памяти обьект Интеджер, а вот эта Integer myval = присвоила значение ссылки на обьект переменной myval.
PS. Блин мне кажеться что это уже не нужный флейм .
Представьте — у нас есть большой массив. Надо в нём находить максимальное и минимальное значение.
Было бы здорово сделать функцию, которая ищет их одновременно (это эффективно), но как? Массив возвращать? А как по функции
int[] GetMinMaxValues(int[] values)
понять, сколько значений она возвращает и в каком порядке?
Постоянно встречаю, что функции нужно вернуть несколько значений. Промежуточные результаты могут использоваться повторно в другой функции, что сильно бы повысило эффективность.
Здравствуйте, Тычеблин, Вы писали:
T>>Буду рад если вы приведете кусочек кода, после которого у меня наступит прозрение чтобы понять, что я теряю сейчас. Т>
Т> public static void Swap(ref Object a, ref Object b)
Т> {
Т> Object temp = a;
Т> a = b;
Т> b = temp;
Т> }
Т>.......
Т>// использование...где то в коде
Т>Object a=new Object;
Т>Object b=new Object;
Т>Swap(ref a, ref b)
Т>
Т>как это сделать на JAVA я знаю...но можешь написать для усугубления осчущения.
Остается за кадром вопрос — а на фига собственно нужна эта функция?
При расчёте разных статистических функций часто нужно вычислять такие вещи, как суммы квадратов, сумма попарных произведений и пр. над двумя массивами.
Как это красиво и эффективно сделать на java?
Вот для корреляции нам надо вычислить суммы квадратов и сумму попарных произведений.
Дано:
double[] x;
double[] y;
нужно:
double sx2,sy2,sxy;
как?
Писать три функции, в каждой делать цикл? Не лучше ли сделать функцию, которая посчитает всё за один проход и вернёт всё сразу?
Далее, допустим, нам нужно посчитать корреляцию массивов и стандартную девиацию каждого из массивов. При расчёте корреляции у нас уже будут готовы суммы квадратов. Зачем нам при расчёте девиации считать их опять? А как сделать возврат (опционально) этих данных из функции корреляции и передачу (опционально) их в функцию расчёта девиаций?
P.S. И не надо говорить, что пример из пальца высосан.
Здравствуйте, Евгений Коробко, Вы писали:
ЕК>При расчёте разных статистических функций часто нужно вычислять такие вещи, как суммы квадратов, сумма попарных произведений и пр. над двумя массивами. ЕК>Далее, допустим, нам нужно посчитать корреляцию массивов и стандартную девиацию каждого из массивов. При расчёте корреляции у нас уже будут готовы суммы квадратов. Зачем нам при расчёте девиации считать их опять? А как сделать возврат (опционально) этих данных из функции корреляции и передачу (опционально) их в функцию расчёта девиаций? ЕК>P.S. И не надо говорить, что пример из пальца высосан.
Пример, безусловно, хороший. Но стоит его немного дополнить — данная функиональность вызывается, наприсер, как веб-сервис. После злобной оптимизации с передачей примитивных типов по ссылке производительность функции выросла в 2 раза, теперь она выполняется за 25 миллисекунд. И еще 10 секунд уходит на сборку/разбор XML и транспорт по сети
Здравствуйте, Евгений Коробко, Вы писали:
ЕК>Представьте — у нас есть большой массив. Надо в нём находить максимальное и минимальное значение. ЕК>Было бы здорово сделать функцию, которая ищет их одновременно (это эффективно), но как? Массив возвращать? А как по функции
ЕК>int[] GetMinMaxValues(int[] values)
ЕК>понять, сколько значений она возвращает и в каком порядке?
ЕК>Постоянно встречаю, что функции нужно вернуть несколько значений. Промежуточные результаты могут использоваться повторно в другой функции, что сильно бы повысило эффективность.
Здравствуйте, Евгений Коробко, Вы писали:
ЕК>При расчёте разных статистических функций часто нужно вычислять такие вещи, как суммы квадратов, сумма попарных произведений и пр. над двумя массивами. ЕК>Как это красиво и эффективно сделать на java? ЕК>Вот для корреляции нам надо вычислить суммы квадратов и сумму попарных произведений. ЕК>Дано: ЕК>double[] x; ЕК>double[] y;
ЕК>нужно:
ЕК>double sx2,sy2,sxy;
ЕК>как?
ЕК>Писать три функции, в каждой делать цикл? Не лучше ли сделать функцию, которая посчитает всё за один проход и вернёт всё сразу?
ЕК>Далее, допустим, нам нужно посчитать корреляцию массивов и стандартную девиацию каждого из массивов. При расчёте корреляции у нас уже будут готовы суммы квадратов. Зачем нам при расчёте девиации считать их опять? А как сделать возврат (опционально) этих данных из функции корреляции и передачу (опционально) их в функцию расчёта девиаций?
ЕК>P.S. И не надо говорить, что пример из пальца высосан.
Создать класс с данными религия не позволяет? Тогда используйте массивы для передачи и возврата значений, от этого еще никто не умирал, красоты мало, зато первоманс высокий.
Здравствуйте, Евгений Коробко, Вы писали:
ЕК>Представьте — у нас есть большой массив. Надо в нём находить максимальное и минимальное значение. ЕК>Было бы здорово сделать функцию, которая ищет их одновременно (это эффективно), но как? Массив возвращать? А как по функции
ЕК>int[] GetMinMaxValues(int[] values)
ЕК>понять, сколько значений она возвращает и в каком порядке?
ЕК>Постоянно встречаю, что функции нужно вернуть несколько значений. Промежуточные результаты могут использоваться повторно в другой функции, что сильно бы повысило эффективность.
Беря в руки ООЯ научитесь уже думать объектно, а не процедурно:
package ru.rsdn.test;
public class Searcher {
private int min;
private int max;
private int[] array;
public Searcher(int[] _array) {
array = _array;
}
public void eval() {
for (int i = 0; i < array.length; i++) {
if (min > array[i])
min = array[i];
if (max < array[i])
max = array[i];
}
}
public int getMax() {
return max;
}
public int getMin() {
return min;
}
}
package ru.rsdn.test;
public class Test {
public static void main(String[] args) {
int[] a = { 2, 1, 5, 1, -1 };
Searcher searcher = new Searcher(a);
searcher.eval();
System.out.println("min = " + searcher.getMin());
System.out.println("max = " + searcher.getMax());
}
}
Не верите, посмотрите классы java.util.Collection. Наверно Sun можно в этом вопросе доверять?
Здравствуйте, Тычеблин, Вы писали:
Т>Здравствуйте, rsn81, Вы писали:
R>>В ООП по определению метод должен осуществлять обработку самого объекта, а не передаваемого ему.
Т> откуда такое определение?
Т>скажу мягко...это утверждение несоответствует действительности
Тогда отправляйся RTFM, как тут уже сказали. В основе ООП лежит канон Tell Don't Ask Поэтому если бы автор написал класс так:
class New
{
int n = 0;
public static void change(int m)
{
n = m;
}
public static void main(String[]args)
{
change(m);
System.out.print(n);
}
}
у него и вопросов бы не было.
>Я так понимаю я не понял самой сути проблемы. Читая посты у меня сложилось впечатление что мое желание вообще с точки зрения java неправильно. Если так, то не могли бы вы мне объяснить почему...
Именно неправильно. Гугли по слову "инкапсуляция". Ты не должен лезть в другие объекты и менять их свойства в своих методах, свойства должны быть private, а ты должен дергать методы этих объектов и "просить" их менять свое свойство. Так правильно. Если у тебя программки не сложные и хочется писать процедурно, пиши на C, зачем себя мучать?
Здравствуйте, Аноним, Вы писали:
А>у него и вопросов бы не было. Не совсем, один принципиальный вопрос остался: как вы из статического метода change получили доступ к полю класса n? Компилироваться будет вот такой вариант:
package ru.rsdn.test;
class New {
int n;
void change(int m) {
n = m;
}
public static void main(String[] args) {
New _new = new New();
_new.change(1);
System.out.println(_new.n);
}
}
Здравствуйте, Евгений Коробко, Вы писали:
ЕК>Писать три функции, в каждой делать цикл?
Забавно, только при процедурном мышлении мог возникнуть вариант такого решения!
ЕК> Не лучше ли сделать функцию, которая посчитает всё за один проход
Безусловно лучше.
ЕК> и вернёт всё сразу?
Можно и так в виде композитного объекта, но через return-value!
К примеру, с точки зрения ООП правильным считается использование класса Point, который инкапсулирует все координаты точки, при процедурном подходе вас все подзуживает координаты вернуть как отдельные значения — а зачем тогда ООП вообще?
Правильно сказали, если так сложно въехать в ООП, берешь C — и не мучаешься. Ничего плохого в том, чтобы работать так, как удобно — нет. Вот только эффективнее делать все инструментами предназначенными для того.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Тычеблин, Вы писали:
Т>>Здравствуйте, rsn81, Вы писали:
R>>>В ООП по определению метод должен осуществлять обработку самого объекта, а не передаваемого ему.
Т>> откуда такое определение?
Т>>скажу мягко...это утверждение несоответствует действительности
А>Тогда отправляйся RTFM, как тут уже сказали. В основе ООП лежит канон Tell Don't Ask
рекомендую познакомиться с Visitor Design Pattern
А>
class New
А>{
А> int n = 0;
А> public static void change(int m)
А> {
А> n = m;
А> }
А> public static void main(String[]args)
А> {
А> change(m);
А> System.out.print(n);
А> }
А>}
Здравствуйте, Cider, Вы писали:
C>Здравствуйте, Евгений Коробко, Вы писали:
C>Пример, безусловно, хороший. Но стоит его немного дополнить — данная функиональность вызывается, наприсер, как веб-сервис.
... а если бы он вез патроны.....
....а если эта функциональность отрисовщика трехмерной векторной графики?
ЕК>>P.S. И не надо говорить, что пример из пальца высосан.
T>Создать класс с данными религия не позволяет? Тогда используйте массивы для передачи и возврата значений, от этого еще никто не умирал, красоты мало, зато первоманс высокий.
R>К примеру, с точки зрения ООП правильным считается использование класса Point, который....
только взял боец гитару — сразу видно гармонист.
задачи разные бывают...судя по твоим репликам с проблеммами реализации например, отрисовки векторной графики средствами JAVA, (матрицы, то-сё) тебе сталкиваться не приходилось.
R>.. а зачем тогда ООП вообще?
для упрощения решения задач, сложность которых масштабность и компонентность.
для большинства-же задач сложность которых производительность ООП помеха... вот так.
R>Правильно сказали, если так сложно въехать в ООП,
для тебя это такой предмет гордости. такое ощущение, что процесс въезжания с тобой случилося совсем недавно
Здравствуйте, Тычеблин, Вы писали:
Т>задачи разные бывают...судя по твоим репликам с проблеммами реализации например, отрисовки векторной графики средствами JAVA, (матрицы, то-сё) тебе сталкиваться не приходилось.
Да, не сталкивался.
1. Слышал о проекте Java 3D, надеюсь, кто-нибудь компетентно прокомментирует это.
2. Откровенно непонятно, зачем писать именно и позарез на Java, если, насколько понял, по вашим рассуждениям о производительности, что вы против объектов по определению и все собираетесь гонять примитивными типами?
Утрированный пример, но разговор получается в стиле диалога прикладника и системщика о том, почему и как именно системщик драйвер видеокарты собрался писать на Java.
Т>для упрощения решения задач, сложность которых масштабность и компонентность. Т>для большинства-же задач сложность которых производительность ООП помеха... вот так.
1. Смотрю, все же соглашение о том, что изменение примитивных типов по ссылке не укладывается в ООП все же произошло. Вопрос только в том, зачем было так долго упираться и спорить?
2. Вы придумали, я не утверждал, что ООП — единственно эффективная парадигма. Кроме флейма, речь шла конкретно о том, почему разработчики Sun не сделали то, о чем данная тема: ООЯ Java следует ООП — все.
Т>для тебя это такой предмет гордости. такое ощущение, что процесс въезжания с тобой случилося совсем недавно
Прекратите, пожалуйста, юродствовать.
Здравствуйте, rsn81, Вы писали:
R>Здравствуйте, Тычеблин, Вы писали:
R>Да, не сталкивался. R>1. Слышал о проекте Java 3D, надеюсь, кто-нибудь компетентно прокомментирует это.
именно к Java 3D это никакого отношения не имеет
R>2. Откровенно непонятно, зачем писать именно и позарез на Java,
например здесь
о приимуществах векторной графики надеюсь рассказывать ненужно
R>2если, насколько понял, по вашим рассуждениям о производительности, что вы против объектов по определению и все собираетесь гонять примитивными типами?
это кто-то в вашем воображении так рассуждает...успешной борьбы
R>Утрированный пример, но разговор получается в стиле диалога прикладника и системщика о том, почему и как именно системщик драйвер видеокарты собрался писать на Java.
для мобильных телефонов ты похоже тоже ничего не писал.