(ссылка в сообщении)
Т>>скажу мягко...это утверждение несоответствует действительности R>Скажу твердо: RTFM! В рамках ООП — соответствует. Конечно, если вы пишете процедурно, то...
А если функционально?
Использовать другие подходы кроме ООП нонче запрещается?
Здравствуйте, Trean, Вы писали:
T>Здравствуйте, Тычеблин, Вы писали:
T>Я на C/C++ писал в открытом море, и когда, если следовать вашей аналогии меня засунули в аквариум, я даже не расстроился потери int& или int*.
Т>>так и я, начав переписывать код, некоторое время, делал это в стиле JAVA ... Т>>прозрение наступило позже... Т>>одним словом, это нужно реально ощутить на практике. Т>>уверяю, контраст разительный. Т>>и дело не только в примитивах. считаю возможность передавать ЛЮБЫЕ переменные byref важнее и полезне чем дженерики.
T>Гм, позвольте, а где в java проблема с передачей изменяемых в методе объектов? Это только к примитивам относится, или вы хотите чтобы еще и значение передаваемой ссылки на объект можно было менять?
да, обязательно, именно так. причем в объявлении параметров функции обязательно большими буквами BYREF !!!!!
T>Так это такие баги в программе будут, что лучше сразу выпить яду.
не пользуйся и баги будут все те же...неслышал чтобы программрование на C# более трудоемкое чем на JAVA.
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 я знаю...но можешь написать для усугубления осчущения.
(ссылка в сообщении)
Т>>скажу мягко...это утверждение несоответствует действительности R>Скажу твердо: RTFM! В рамках ООП — соответствует. Конечно, если вы пишете процедурно, то...
ну натыкал бы меня носом...мне ж интересно где в ООП такое написано.
(приведеную ссылку прочел, просветления не наступило )
Здравствуйте, Курилка, Вы писали:
К>А если функционально?
А вы пробовали? Попробуйте, к примеру, в XSLT-преобразовании такое сделать...
К>Использовать другие подходы кроме ООП нонче запрещается?
Не понял шутку юмора.
Здравствуйте, rsn81, Вы писали:
R>Здравствуйте, Курилка, Вы писали:
К>>А если функционально? R>А вы пробовали? Попробуйте, к примеру, в XSLT-преобразовании такое сделать...
И что ты пытаешься этим показать?
Просто Объекты они только в ООП, поэтому при применении других подходов решение будет другим, ты же только про процедурное говоришь.
К>>Использовать другие подходы кроме ООП нонче запрещается? R>Не понял шутку юмора.
просто ООП — не единственный подход к решению задач, порой другие варианты более удобны.
Здравствуйте, aka50, Вы писали:
A>Здравствуйте, fellow.sufferer, Вы писали:
FS>>То есть ты щас повторил, то что я написал от своего имени и этим типа избежал ответа на вопрос) FS>>Хорошая попытка)
A>чтоб было понятнее... основная твоя ошибка здесь: FS>>3. obj = new MyObject(); — создал объект и установил ссылку. A>изменил значение указателя
А что если ипользуеться слово установил то этио значит что ничего не изменилось . .??? По-моему если что -то кто -то установил, то по-любому над чем происходила эта операция было изменено!!!!
A>Правильное слово будет "изменил", и тогда становится понятно что A>есть "примитивный" указатель... он в кавычках, т.к. что int, что A>ссылка передаются по значению...
Здравствуйте, Тычеблин, Вы писали:
T>>Гм, позвольте, а где в java проблема с передачей изменяемых в методе объектов? Это только к примитивам относится, или вы хотите чтобы еще и значение передаваемой ссылки на объект можно было менять?
Т>да, обязательно, именно так. причем в объявлении параметров функции обязательно большими буквами BYREF !!!!!
T>>Так это такие баги в программе будут, что лучше сразу выпить яду.
Т>не пользуйся и баги будут все те же...неслышал чтобы программрование на C# более трудоемкое чем на JAVA.
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 так же не напишешь, но я не вижу того, чтобы у меня прозрение наступило. Надо постоянно следить, как объявлена функция (особенно касается сторонних библиотек) и что она делает с переданными параметрами, чтобы не получилось сайд эффектов. Вот допустим, мне дали библиотеку в которой разработчик просто так написал (ref Object a, ref Object b) хотя их и не меняет (может быть), а мне надо чтобы ссылки после вызова метода ссылки гарантированно остались не изменными, мне надо где-то дописать const или вызывать надо Swap(a, b) или самому сохранять их? C# на мой взгляд уже перегружен кейвордами по самое не могу, скоро в C++ превратится для меня ref это усложнение с рассчетом, что разработчик будет очень внимательным.
Указанное выше поведение мне понадобилось считанное число раз, так что меня константность ссылок вполе устраивает
Здравствуйте, Курилка, Вы писали:
К>И что ты пытаешься этим показать?
Мы пока еще на брудершафт не пи... не курили.
К>Просто Объекты они только в ООП, поэтому при применении других подходов решение будет другим, ты же только про процедурное говоришь.
Вы неправы противопоставляя объектно-ориентированное программирование и функциональное. Есть одна класссификация: функциональный, по-другому декларативный подход (вложенные вызовы функций) и императивный подход (вычисления в виде инструкций). А есть другая классификация: объектно-ориентированный подход и процедурный.
К примеру, Java по умолчанию (!) следует и ООП, и императивному подходу. Так давайте мух с котлетами не будем мешать, да?
К>просто ООП — не единственный подход к решению задач, порой другие варианты более удобны.
Я по-моему не утверждал, что на ООП мир клином сошелся, это вы за меня придумали.
Здравствуйте, rsn81, Вы писали:
R>Здравствуйте, Курилка, Вы писали:
К>>И что ты пытаешься этим показать? R>Мы пока еще на брудершафт не пи... не курили.
РСДН — демократичная среда, извините, если я Вас задел
Но имхо тут принято особо не "выкать", что формирует более простую манеру общения.
К>>Просто Объекты они только в ООП, поэтому при применении других подходов решение будет другим, ты же только про процедурное говоришь. R>Вы неправы противопоставляя объектно-ориентированное программирование и функциональное. Есть одна класссификация: функциональный, по-другому декларативный подход (вложенные вызовы функций) и императивный подход (вычисления в виде инструкций). А есть другая классификация: объектно-ориентированный подход и процедурный. R>К примеру, Java по умолчанию (!) следует и ООП, и императивному подходу. Так давайте мух с котлетами не будем мешать, да?
Только вот приведённая классификация и есть мешания мух с котлетами. Противопоставление декларативного и императивного, не есть противопоставление ООП и ФП. Вложенные вызовы функций не есть ФП, с другой стороны функциональное программирование вполне может сочетаться с императивным. Помимо всего этого есть, к примеру ещё и логическое программирование.
Но это уже какой-то глупый флейм выходит
Просто основной момент был — проме ООП и процедурного программирования существуют и другие подходы, причём их применять можно и в Java, причём и процедурное в том числе (e.g. static-методы по сути и являются теми самыми "процедурам")
Здравствуйте, Trean, Вы писали:
T>Понятно, что на Java так же не напишешь, но я не вижу того, чтобы у меня прозрение наступило.
...мы такие разные....
T>Надо постоянно следить, как объявлена функция (особенно касается сторонних библиотек) и что она делает с переданными параметрами, чтобы не получилось сайд эффектов. Вот допустим, мне дали библиотеку в которой разработчик просто так написал (ref Object a, ref Object b) хотя их и не меняет (может быть),
документацию всегда нужно внимательно читать.
ref — однозначно указывает на определенное поведение. точка
T> а мне надо чтобы ссылки после вызова метода ссылки гарантированно остались не изменными, мне надо где-то дописать const или вызывать надо Swap(a, b) или самому сохранять их?
скорее всего пользоваться другой библиотекой.
T>C# на мой взгляд уже перегружен кейвордами по самое не могу, скоро в C++ превратится для меня ref это усложнение с рассчетом, что разработчик будет очень внимательным.
представляю каким шоком было появление дженериков.
T>Указанное выше поведение мне понадобилось считанное число раз, так что меня константность ссылок вполе устраивает
ок...как и предполагал — все свелось к вопросам вкусов ( о которых как известно не спорят)...
ну да ладно, я просто хотел донести свое вИдение. надеюсь был понятен.
И в чем спор-то? Вы и я — говорим одно и тоже за одним исключением: вы мне пытаетесь что-то доказать. Да, я как раз и начал писать, что раз классификации разные, значит возможны пересечения. Про то, что static-программирование в Java есть не что иное, как процедурное программирование, тоже вроде озвучивал выше.
Так о чем вы, в чем хотите меня переубедить?
В том, что если писать на Java функционально, то понадобиться передать параметр по ссылке, пример приведете — поверю.
И потом по умолчанию Java ООЯ, это подразумевает удобство и достижение максимальной эффективности именно с использованием ООП, так что по-моему в этой теме такой разговор действительно флейм.
Здравствуйте, rsn81, Вы писали:
R>Здравствуйте, Тычеблин, Вы писали:
Т>>как это сделать на JAVA я знаю...но можешь написать для усугубления осчущения. R>Каков пример, таков и ответ:
Object a = new Object;
R>Object b = new Object;
R>// вместо Swap(ref a, ref b)
R>Object temp = a;
R>a = b;
R>b = temp;
верно, так оно и есть...
Яркий пример виртуозного владения технологией Copy&Paste.
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, aka50, Вы писали:
A>>"Поздравляю Шарик — ты балбес" (с) Матроскин B>Зарываешься.
Упс... согласен.
A>>примитивный... ну если тебе легче, есть еще weak . B>Ок. Есть Weak, Soft, Strong, Phantom. "Примитивный" это какой?
Пусть будет Strong. Я не про это говорил, а про принцип
передачи byvalue ccылки в функицию... или ты хочешь
сказать что это происходит иначе?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, aka50, Вы писали:
A>>примитивный... ну если тебе легче, есть еще weak .
А>А ты можешь просто ответить на вопрос, который сам же и вызвал введением новых терминов? А>Как же себя ведет при сравнении (==) "не_примитивный" указатель, если "примитивный" ведет себя как int?
Еще раз... "примитивный" == с семантикой примитивного типа. Все. Точка.
Он указатель, ссылается на объект и при передаче в функцию копируется,
как примитивный тип, т.е. поменять внутри функции этот указатель можно
(если не final), но это не повлияет на указатель вне функции.
Я объяснял человеку из c++, там есть понятие указатель. Вот и использовал
этот термин. В java суть ссылка = сложный объект с семантикой примитивного
типа. Усе.
Здравствуйте, Тычеблин, Вы писали:
Т>документацию всегда нужно внимательно читать.
Железный аргумент, чтобы сделать людям жизнь посложнее.
Т>ref — однозначно указывает на определенное поведение. точка
Совсем неоднозначно: или ссылка измениться, или нет — сиди в debug и гадай, а если нет, то в определенный момент жди лавины необъяснимых глюков. dixi
Т>скорее всего пользоваться другой библиотекой.
Скорее всего? А поточнее можно? Ведь чтобы выбрать такую библиотеку, нужно будет все известные перебрать руками.
Т>представляю каким шоком было появление дженериков.
Очень неуместная попытка передернуть.
MS действительно постепено все сильнее и сильнее перегружает C# все новыми и новыми конструкциями, яркий пример постоянно привожу с непонятным богатством зоопарка модификаторов virtual-override-new-abstract. А C# 3.0 видели, добавление SQL в лексику языка — это такая остроумная шутка от MS?
Т>ок...как и предполагал — все свелось к вопросам вкусов ( о которых как известно не спорят)...
Не совсем. Полностью формализованная парадигма исключает адекватность вкусов. Любить делать криво можно, но за это придется платить. ООП не предполагает, что это правильно, значит в рамках ООП такого вкуса быть не может.
Здравствуйте, JITM, Вы писали:
JIT>Здравствуйте, aka50, Вы писали:
A>>чтоб было понятнее... основная твоя ошибка здесь: FS>>>3. obj = new MyObject(); — создал объект и установил ссылку. A>>изменил значение указателя
JIT>А что если ипользуеться слово установил то этио значит что ничего не изменилось . .??? По-моему если что -то кто -то установил, то по-любому над чем происходила эта операция было изменено!!!!
Если уж докапываться до слов, по по полной.
"Куда он установил ссылку?".
Изменить можно что-то (т.е. ссылку как некий объект, по этому я испльзовал слово указатель,
как понятное тем, кто работал в С++, т.к. это некая переменная значением которой является
ссылка на объект). Установить можно что-то куда-то... дык вот вопрос, куда установлена ссылка?
Я понял как установлена на объект. Но она должна где-то хранится, вот в переменной типа "указатель"
она и хранится.
И вообще, это все в любой более менее толстой книжке расписано и цитату выше приводили...
Здравствуйте, rsn81, Вы писали:
R>Здравствуйте, Тычеблин, Вы писали:
Т>>документацию всегда нужно внимательно читать. R>Железный аргумент, чтобы сделать людям жизнь посложнее.
Т>>ref — однозначно указывает на определенное поведение. точка R>Совсем неоднозначно: или ссылка измениться, или нет — сиди в debug и гадай, а если нет, то в определенный момент жди лавины необъяснимых глюков. dixi
ref — утверждает ненужно надеятся что ссылка не изменится...все.какие гадания?
ты ведь не гадаешь что вернет функция ноль или 338.
было бы полезнее услышать твой комментарий на предмет тебе известный.