Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запуск как бы в отдельной vm.. 
:(
    Опции темы
Viroman
Дата 6.11.2010, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Здравствуйте форумчане,

есть одна программа, которая активно использует static переменные, видимо лень было изначально выдумывать велосипед. Не важно, вторая копия этой же программы в VM хоть и запускается, но видимо когда то они начинают друг другу мешать и это убивает VM вместе с первой копией программы.
Теперь вопрос, как запустить новую программу в той же VM, но так, чтобы и та и другая копия не воздействовали друг на друга, будто бы их запустили в разных VM. Чтобы их статические переменные действовали только на них.
Да, я понимаю, что можно запустить отдельную VM через запуск java.exe -jar..... и так далее, но я не хочу запускать несколько java процессов, хочу всё в одном.

И в догонку вопрос, который тоже к моей теме относится, можно ли в java обращаться к "родителям", короче говоря по древу, но в обратном направлении. То есть родитель может обратиться к дочернему объекту, через дочерний объект дальше к другому объекту, который этот дочерний объект создал и так далее. То есть от бабушек/дедушек, к папе/маме, к детям.
А вот наоборот можно ли? То есть чтобы дети обращались к родительскому объекту, или через несколько "поколений" обратно.
В данный момент я делаю так, что при создании объекта передаю ему "this" самого первичного объекта и по сути тогда уже могу через этого родителя доступаться. Но блин, это как то маразмовато получается, и если мне нужен только родитель объекта, а не его прапредок, то мне приходится обращаться к нему получается через несколько "поколений".
Извинясюь, что использовал вот так такую аналогию с семейным древом, но лучшей возможности донести вопрос не представилось возможным.
Просто учитывая, что это объектно ориентированный язык с унаследованием, я до сих пор не нашёл, как это делать, если такое вообще возможно.
PM MAIL   Вверх
_Y_
Дата 6.11.2010, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



По второму вопросу:

Может просто использовать слово super, указывающее класс-родитель?

Или я не понял вопроса и надо, чтобы предок обращался к потомку? Тогда сложнее. Класс-родитель, по определению, ничего не знает и не должен знать о классах потомках. Даже само существование класса-потомка родительскому классу неизвестно. Поэтому решений обратных super не существует. Надо писать отдельный код для каждого конкретного случая.

Это сообщение отредактировал(а) _Y_ - 6.11.2010, 14:04


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
nc30
Дата 6.11.2010, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 24.6.2010
Где: Санкт-Петербург

Репутация: 5
Всего: 8



Цитата(Viroman @ 6.11.2010,  12:00)

То есть родитель может обратиться к дочернему объекту, через дочерний объект дальше к другому объекту, который этот дочерний объект создал и так далее. То есть от бабушек/дедушек, к папе/маме, к детям.
Написано что-то... не совсем мне понятное. Может быть имеется в виду иерархия классов, а не объектов? Но и в этом случае _Y_ все подробно расписал. Отдельной строкой идет реализация принципа полиморфизма (при котором через переменную типа Parent будет вызван переопределенный метод Offspring). Но это заслуга отнюдь не суперкласса.

Или вы что-то хитрое придумали? Для расширения кругозора в ООП smile 

Это сообщение отредактировал(а) nc30 - 6.11.2010, 20:14
PM MAIL   Вверх
Viroman
Дата 6.11.2010, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Надо подумать, надо проверить,
а то что получается, что если super.super.method() это возвращаешься к праисточнику, или это только на один шаг назад можно?

Код

в виду иерархия классов, а не объектов? 

Ну как раз таки иерархия объектов, ведь объект так или иначе образуется из класса..
я конечно могу на эту тему послушать заумную проповедь, но это будет опять расклад из области, чем отличается функция от метода, ведь зачем мне простые вещи усложнять пустозсвонством  smile 
ps: я не говорю о доступе через extend классов, а именно объектов создающихся из классов по new...

Это сообщение отредактировал(а) Viroman - 6.11.2010, 22:23
PM MAIL   Вверх
Viroman
Дата 6.11.2010, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



Чтобы наверное было проще понять, что я хочу, приведу аналогию из JavaScript и Frame,
основная страница создаёт в себе фрэйм с вызовом страницы по аналогии объект здесь, далее эта фрейм страница создаёт следующий фрэйм указывая на другую страницу, опять же та же самая аналогия..
Теперь имеем дедушкa>папа>сын...
опять же теперь, если я хочу из дедушки доступиться до функций папы, мне надо сказать, получи объект по имени папы>функция, далее чтобы доступиться из дедушки до внучика, мне надо сказать, получи объект по имени папы>получи объект по имени сына>функция и так далее, то есть эта аналогия в Java имеется бесспорно.
Но на другой стороне имеем обратный путь по аналогии доступа к предкам.
Чтобы из сына доступиться до дедушки, идёт вызов parent.parent.function() типа этого в общем..
Даже по доступу к файлам то же самое происходит, /../program.exe, или в том же PHP include /../../../site.php
Вот теперь приведя вам такую аналогию стало понятнее?
Вот на данный момент, чтобы в java доступиться от сына к дедушке, я при создании объекта папы передаю this дедушки, а потом от папы при создании объекта в нём передаю значение дедушки сыну. И тогда сын знает, кто его дедушка... но не знает, кто его папа, но поскольку это знает дедушка, то из сына я доступаюсь к папе через дедушку...но это маразм, ибо мне казалось, что ява разработчики тоже не дураки и должны были предусмотреть такой расклад, или нет?
PM MAIL   Вверх
powerOn
Дата 6.11.2010, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



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






--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Temdegon
Дата 7.11.2010, 00:44 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: 7
Всего: 9



Млин. Бабушки, дедушки...
У вас обькет А создает обьект Б и получает на него ссылку и так далее вглубь. Для доступа из А к Б вы используете эту ссылку. Если из Б нужно вызвать А, то вам нужно передать ссылку в экземпляр Б, т.е. this. 
Другого пути нет и быть не может. 
Пример, который вы привели из JavaScript ИМХО сюда не вписывается. Document, Window и прочие радости DOM это конкретные экземпляры вполне определенных классов
http://w3schools.com/htmldom/default.asp. И то что они содержат ссылку parent вовсе не означает, что ЛЮБОЙ JavaScript обьект имеет сслыку на обьект, который его создал.

Цитата

И тогда сын знает, кто его дедушка... но не знает, кто его папа, но поскольку это знает дедушка, то из сына я доступаюсь к папе через дедушку...но это маразм, ибо мне казалось, что ява разработчики тоже не дураки и должны были предусмотреть такой расклад, или нет? 

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

Добавлено через 8 минут и 20 секунд
По поводу Как бы в отдельной ВМ. Опишите подробнее пожалуйста, как и что вы запускаете?
Все static-переменные существуют в единственном экземпляре внутри одной VM. И ничего вы с этим не сделаете.
Как вы там запускаете две копии программы в одном VM я не понимаю. Что такое "программа" в вашем контексте? И чем вам не нравится способ через java -jar ?
PM MAIL   Вверх
_Y_
Дата 7.11.2010, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Следует сказать, что  Temdegon очень четко расписал. Я как-то сразу не въехал, что разговор, собственно, о получении одним объектом ссылки на другой. И наследование здесь совершенно не при чем. 

Viroman, стОит, наверное, обратить внимание, что Java - язык довольно жестко структурированный (и даже идеологизированный  smile ) на уровне абстракций-концепций. Про JavaScript я знаю только на уровне "Hellow, world!", но подозреваю, что его структура гораздо более диффузная. Поэтому многих конструкций имеющихся в других языкак в Java просто нет. Когда начинаешь работать с Java, это обидно. Но потом понимаешь, что жесткая концептуальность защищает от множества ошибок и багов. 

Извиняюсь, если говорю очевидные вещи. Рано еще, воскресенье. Только проснулся smile 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Viroman
Дата 7.11.2010, 13:10 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 28.7.2008

Репутация: нет
Всего: нет



В общем я понял, что никто ничего не знает конкретно :(

Цитата

http://w3schools.com/htmldom/default.asp. И то что они содержат ссылку parent вовсе не означает, что ЛЮБОЙ JavaScript обьект имеет сслыку на обьект, который его создал.

Приведение аналогии не означало, что я говорю о тех же вещах. 

Цитата

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

Маразм как раз таки необходимость this передавать в объект, а будь подобное, это бы облегчило во многом создание програм, а особенно использование free source, где надо очень перелопатить многое, чтобы обмениваться данными.
То есть если два объекта созданных через несколько поколений хотят обменяться данными, чтобы и их родительские объекты могли изменять данные и их "дети", то надо в детей через несколько поколений передавать ссылку, это надо перелопатить весь код, чтобы всё это выправить. Конечно, я могу static использовать, но это не подходит для запуска нескольких объектных инстанций.
Вообще ваш спор больше исходит из твердолобости, нежели из маразматических изысканий, очень жаль конечно.

Цитата

По поводу Как бы в отдельной ВМ. Опишите подробнее пожалуйста, как и что вы запускаете?
Все static-переменные существуют в единственном экземпляре внутри одной VM. И ничего вы с этим не сделаете.
Как вы там запускаете две копии программы в одном VM я не понимаю. Что такое "программа" в вашем контексте? И чем вам не нравится способ через java -jar ? 

А что тут вам непонятного? 
Разжёвываю ..
Запускаю так, java -cp "chuzhoj.jar,moj.jar" mojclass
чтобы две машины не запускать, mojclass запускает иницальный класс из chuzhoj,jar, то бишь создавая объект начального класса с передачей в main метод необходимых параметеров с запуском из chuzhoj.jar, при этом два раза в отдельных threadах.
Таким образом я в одной машине запускаю две копии программы, не запуская два java процесса.. во имя экономии памяти пользователя.
Теперь понятно?
Ах да, хуже дела обстоят, если энто дело запустить как апплет, ведь браузер запускает ява машину единожды и загружает программу, но там же наблюдаются те же проблемы, как только этот апплет под браузером запустить два раза, так сразу начинаются проблемы с параллельной работой программы описанные выше.

В общем чую, простых решений не существует или просто как часто это очень бывает, никто ничего об этом не знает..

Это сообщение отредактировал(а) Viroman - 7.11.2010, 13:11
PM MAIL   Вверх
nc30
Дата 7.11.2010, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 24.6.2010
Где: Санкт-Петербург

Репутация: 5
Всего: 8



Viroman,
Тут уже много уважаемых людей отозвалось по теме, но я еще раз кратко обозначу то, что хотел сказать (хотя надо было сделать это сразу, возможно удалось бы частично избежать последующих недоразумений и недопонимания).

Слово "наследование" может быть воспринято не совсем правильно, если не относиться к нему здраво, как к удобной - да и то не всегда - абстракции. Слишком буквальные параллели из реальной жизни приведут к ошибочному восприятию. Да нет никакого наследования в Java. Есть расширение. 
Код

class Child extends Parent
 Класс Child расширил класс Parent, дополнив (возможно) его какими-то новыми свойствами и функциональностью или изменив поведение. На мой взгляд, это очевидно.

Путаница усиливается, если мы начнем абстракцию применимую к классам распространиять на объекты. Экземпляр класса-наследника по умолчанию включает в себя поля и методы предка (кроме private, конечно). Для обращения к ним не нужен никакой this и прочие ухищрения. Если мы говорим о наследовании по отношению к объектам, то забудьте о бабушках/дедушках - это звучит курьезно. Ибо правнук включает в себя прадедушку, дедушку и папу  smile 

А если прав powerOn, и вы изобрели односвязный список (можете легко обратиться к "потомку", но проблемы достучаться до "предка"), то просто сделайте его двусвязным, и все должно получиться. А еще лучше, полагаю, воспользоваться подходящей для вашего случая коллекцией, например, LinkedList.
Цитата
Ну как раз таки иерархия объектов, ведь объект так или иначе образуется из класса..
я конечно могу на эту тему послушать заумную проповедь, но это будет опять расклад из области, чем отличается функция от метода, ведь зачем мне простые вещи усложнять пустозсвонством  smile 

Ну что вы, какой из меня проповедник.  А если я чем-то вас задел (о чем делаю вывод по использованным вами терминам), то искренне прошу прощения   smile

Да, и еще. Написав это
Цитата

Или вы что-то хитрое придумали? Для расширения кругозора в ООП  smile 
 я ожидал в ответ не "аналогии из JavaScript и Frame", а необходимой и достаточной порции написанного вами Java-кода. 

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

Код в студию!  smile 

Это сообщение отредактировал(а) nc30 - 7.11.2010, 16:19
PM MAIL   Вверх
jk1
Дата 7.11.2010, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Цитата

 ...то бишь создавая объект начального класса с передачей в main метод необходимых параметров


Никаких объектов создавать не надо. Метод main статический, это значит что вызывать его можно (и нужно) у класса, а не объекта.

Цитата

Таким образом я в одной машине запускаю две копии программы, не запуская два java процесса


Таким образом Вы запускаете две копии кода, который при написании на это не был рассчитан. Единственный способ устранить это концептуальное противоречие - запуск в двух разных JVM. Вообще говоря, чтобы код можно было использовать в нескольких потоках, он должен быть Thread-safe. Очень наивно с Вашей стороны предполагать, что произвольный код, запущенный в разных потоках будет адекватно себя вести.
Для работы в многопоточном окружении любой код должен удовлетворять многим требованиям, это Вам подтвердит любое руководство по параллельному программированию.

Цитата

Маразм как раз таки необходимость this передавать в объект, а будь подобное, это бы облегчило во многом создание програм, а особенно использование free source, где надо очень перелопатить многое, чтобы обмениваться данными.


Скажите, а Вам не приходило в голову, что языки программирование создаются на основании многих десятков лет опыта создания программ? Если некий концепт в язык не включен, значит он там не нужен. Авторы языка считали, что такие задачи надо решать другими средствами. Вы этим недовольны? Так выберите себе другой язык и не сотрясайте попусту воздух.

Об обмене информацией: описанный Вами способ очень быстро заводит в тупик. Хотите передавать информацию между объектами далеких друг от друга классов? Используйте шаблон проектирования Observer. Если речь идет о крупном enterprise-приложении, то JMS Вам в помощь.



Это сообщение отредактировал(а) jk1 - 8.11.2010, 08:57


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
_Y_
Дата 7.11.2010, 21:29 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Цитата(Viroman @  6.11.2010,  22:10 Найти цитируемый пост)
я конечно могу на эту тему послушать заумную проповедь, но это будет опять расклад из области, чем отличается функция от метода, ведь зачем мне простые вещи усложнять пустозсвонством   


Цитата(Viroman @  6.11.2010,  22:44 Найти цитируемый пост)
ява разработчики тоже не дураки и должны были предусмотреть такой расклад


Цитата(Viroman @  7.11.2010,  13:10 Найти цитируемый пост)
В общем я понял, что никто ничего не знает конкретно :(


Цитата(Viroman @  7.11.2010,  13:10 Найти цитируемый пост)
Вообще ваш спор больше исходит из твердолобости, нежели из маразматических изысканий, очень жаль конечно.


Цитата(Viroman @  7.11.2010,  13:10 Найти цитируемый пост)
А что тут вам непонятного? 
Разжёвываю ..


Цитата(Viroman @  7.11.2010,  13:10 Найти цитируемый пост)
или просто как часто это очень бывает, никто ничего об этом не знает..


Собрал я вот эту небольшую коллекцию. И кажется понял, что Вам, Viroman, требуется. Нужно просто, чтобю мы быстренько подогнали язык  Java под Ваши личные представления о том, каким этот язык должен быть. Но посыпаю голову пеплом - лично моей компетенции для этого недостаточно. smile 

ЗЫ: А может надо было с учебника начать? smile 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0603 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.