(130) alex_sh2008, это утверждение чем подкреплено ? статистическими исследованиями ,экспериментами с контрольными группами или так умозрительное заключение ? :)
Просто я знаю как обычно сравнивают:
Берут студента который месяц изучал "каркасно" язык, и ботана который зубрил учебники 2 года и их сравнивают :))) И говорят, нет... вот ботан он больше может написать и лучше :)
И никогда не сравнивают человека который года 2 делал проекты, изучая язык "каркасно", периодически читая учебники и статьи, и ботана который 2 года зубрил учебник, да и понятно, потому что и сравнивать даже глупо.
P.S. ну а вообще дискуссию о методологии обучения думаю можно не продолжать и просто остаться при своих мнениях. Я просто говорю как я считаю лучше и оптимальнее, а уже принимать это или не принимать - тут личный выбор каждого. Я просто вот считаю такой путь оптимальным - его советую, думаю вдруг кто-то прочитает - попробует такой подход, у него лучше пойдет. Бывают люди которым ну надо прочитать там 3-4 учебника, чтобы сесть за реальный проект... так тоже можно. Просто я встречал очень много именно теоретизирования и чтения учебников вместо реальных дел среди моих знакомых, просто потому , что энтузиазм на чтении учебников и тестовых задачах долго не держится.
(131) Lokiy, Я 2.5 года изучал в начале С, потом C++, и при этом была реальная практика, каркасное изучения меня то и дело отталкивало к началу, когда освоив полностью все возможности языка, я уже спокойно мог выстраивать архитектуру своего приложения, и не переписывать одни и те же модули из за того что где то что то не предусмотрел, то же самое применял в приложениях на Java, и сейчас такое же применяю при программирование на шарпе.
А спорит по методам обучения у меня нет ни какого желания, сейчас наверное 90% из всех программистов именно нахрапом изучают языки программирования, в результате структура кода и приложений получается хаотичной, и трудно читаемой. Конкретный пример конфигурации 1С, прошло столько лет а до сих пор не выработано четкое стратегии построения приложений и внутренней организации кода в конфигурации. По множеству раз переписывается одно и тоже.
сейчас наверное 90% из всех программистов именно нахрапом изучают языки программирования, в результате структура кода и приложений получается хаотичной, и трудно читаемой.
Через чур эгоистичная позиция :) Хочу чтобы другие изучали язык правильно, чтобы мне было удобнее читать их код :) У изучающего язык вряд ли должна стоять такая задача :)
Давайте щас еще обсуждать чем абстрактный класс от интерфейса отличается :)))
Это же очевидно.
1. Java не имеет множественное наследование. Используют интерфейсы дополнительно (вместо).
2. В абстрактное классе уже может быть некая реализация. Повторно используемый код.
Это основные и достаточные условия применения.
(125) spacecraft, Вы понимаете, что многое уже на автомате?
А Вы знаете, что так можно поднимать темы среди изучающих язык?
А Вы представляете, что много появилось недавно и старики еще этому могут не доверять?
Если Вы все это знаете и понимаете, так почему до инфостара никак не допрет, что ТУТА НУЖЕНЫ РАЗДЕЛЫ НЕ ТОКА ПО 1С-С-Сыыыы??????????????????
(128) ture, да это нишево, ru.stackoverflow.com - для вопросов и ответов пойдет,
а тут хватит и темы, для 1Сников потрындеть про джаву.
я вот потихонечку ради прикола набиваю там рейтинг иногда, когда не лень развернуто отвечать.
Ну скажем если я вдруг решу, что хочу жить в Баварии (1С ближе к ABAP чем к JAVA)
Как говорится за двумя зайцами погонишься
Тут немного другая ситуация. Один заяц пойман и крутит колесо в мельнице. Думаю поимать другого, по ногастей, главное подкармливать вовремя того первого.
(1) Ibrogim, тоже начал изучать Java, правда, изучаю только после работы, вечерами (ну как обычно). Конечно, Java не 1С, классы, все сложнее. Так что, присоединяюсь к ветке, буду отслеживать. А где Ваша Ссылка на футураму (могу подсобить)? Или что-то не то делаю? :)
(1) Ibrogim, скажите, Вы далеко прошли в JavaRush? Есть вопрос по одной задаче, не совсем догоняю код, подскажите, пожалуйста. Или может сообщество подскажет. Уровень 5, создание классов и объектов, задача5. Провести 3 боя попарно между котами.
Итак, имею следующий код:
/* Провести три боя попарно между котами
Создать три кота используя класс Cat.
Провести три боя попарно между котами.
Класс Cat создавать не надо. Для боя использовать метод boolean fight(Cat anotherCat).
Результат каждого боя вывести на экран.
*/
public class Solution {
public static void main(String[] args) {
//add your code here
}
public static class Cat {
public static int count = 0;
public static int fightCount = 0;
protected String name;
protected int age;
protected int weight;
protected int strength;
public Cat(String name, int age, int weight, int strength) {
count++;
Вопрос по методу fight(), не пойму как аргументы тут необходимо вводить? Привык, что между ними ставится запятая, а тут одну строку. Как это понять? Метод уже описан и дописать код требуется только в PSVM. Как быть? Спасибо!
(321) DoctorRoza, создаются 3 объекта класса cat()
Для боя вызывается метод (к примеру) cat1.fight(cat2);
Т.е. в качестве параметра передается ссылка на другой объект Cat.
(323) spacecraft, меня вводит в ступор в методе написание аргументов:
public boolean fight(Cat anotherCat)
Так можно писать? Или тут просто сознательно написана ошибка?
публичный(открытый) метод возвращает булев тип и принимает в качестве параметра ссылку на объект типа Cat.
Cat и anotherCat это не 2 параметра, а один anotherCat имеющий тип Cat.
Вспомните, как создается ссылка на объект:
Cat myCat = new Cat();
Вот первая часть это и есть пример параметра (Cat anotherCat).
Не примитивные типы передаются по ссылке, а не по значению. И в методе fight(Cat anotherCat) происходит создание новой ссылки типа Cat и именем anotherCat, которая будет ссылаться на тот же самый объект, который ему передадут по внешней ссылке.
а = ЗаполнитьСтруктуру(Новый Структура("БлаБла"));
это "подходит" к коду:
List<Cat> cats = new ArrayList<Cat>();
cats.add(new Cat("Барсик", 5, 15, 10));
если брать аналогию с 1С для метода
public boolean fight(Cat anotherCat)
то будет что-то в этом роде?
Процедура НеВажноКакая()
Док = Документы.ИмяДокумента.НайтиПоНомеру("1");
Результат = fight(Док);
КонецПроцедуры
Функция fight(anotherCat) // тут не указывается тип, т.к. 1С не жестко типизирована.
//тут еще код
Возврат Истина;
КонецФункции
Показать
1С не жестко типизирована, по-этому ссылка передается без указания типа.
В Java обязательно указывать передаваемый тип.
если брать аналогию с 1С для метода
public boolean fight(Cat anotherCat)
то будет что-то в этом роде?
Не правильная аналогия, функция "fight(Cat anotherCat)" принадлежит классу Cat, и аналогия с 1С будет, когда в модуле документа вы пропишите функцию которая будет принимать ссылку на такой же документ. и Вызов будет, так:
Док.fight(другойДокумент)
(333) alex_sh2008, вот от чего точно не зависит... В Java всё от класса object.
И передача по значению или по ссылке определяется только одним. Где значение хранится в памяти. Если в стеке, то передача по значению. Если в управляемой куче, то по ссылке. Кстати, ссылка хранится в стеке и передается по значению, т.е. копируется в новую ссылку.
(335) Lokiy, переменная а хранит значение в стеке (целое число 5). Следовательно передается по значению. Локальная переменная метода function будет содержать значение 5. Но никакого отношения к значению в первой переменной а оно не будет иметь отношение. И при изменение значения локальной переменной а метода function, значение в первой переменной а не изменится.
В чем проблема?
(362) alex_sh2008, можно пример, когда в том примере будет передаваться ссылка?
Могу себе представить, что в принимающем методе будет упаковка в Integer, но сам факт передачи будет по значению из стека.
Даже если переменная объявлена локально, все равно она будет находится в локальном стеке. Объект в куче, в ней целочисленная переменная содержащее значение в локальном стеке. И передаваться будет именно по значению из стека.
(364) spacecraft, Этот код и так описан так что переменная является глобальной, а вот код:
{
int a=5;
function(a);
}
уже вызовет другое поведение передачи параметра в функцию.
(369) spacecraft, В моем варианте идете передача значения, а в первом варианте передача ссыли, так как не указана область определения, и подразумеваем что это глобальная переменная.
Даже если переменная объявлена локально, все равно она будет находится в локальном стеке. Объект в куче, в ней целочисленная переменная содержащее значение в локальном стеке. И передаваться будет именно по значению из стека.
(371) spacecraft, А я еще раз повторю, что все зависит от области видимости переменной, вы можете настроить компилятор так что может переменный относить как глобальные или как локальные, это зависит от специфики приложения.
(384) DoctorRoza, 5 значение переменной а передается по значению (просто копируется). и локальная переменная метода a перекрывает переменную класса а. Для доступа из метода к одноименной переменной класса а используется ключевое слово this.
class Test {
class Foo {
privare int i;
public Foo(int i) {
this.i = i;
}
public String toString() {
return "" + i;
}
}
private void setFoo(Foo f) {
f = new Foo(4);
}
public static void main(String ... args) {
Foo f = new Foo(5);
setFoo(f);
Console.WriteLine(f); //Что выведет 5 или 4????
}
}
Это первая грабля жавы и ООП языков вообще. С шышечкой, с почином тыкскать.
В твоем методе создана копия примитивного типа int. С ней ты и работал.
В Java объекты всегда передаются по ссылке, а примитивы - по значению.
Т.е. передай ты на вход методу объект, ты бы изменил сам объект.
(443) alex_sh2008, ну можно и так сказать, я не особо понимаю ковыряния в таких мелочах и их рассусоливания, один раз столкнулся, запомнил и работаешь дальше.
(444) Lokiy, Запомнить мало главное понимать как работает механизм. К примеру ссылки не позволяют непосредственно изменять защищенные и приватные данные, с использованием указателей это сделать не составляет труда
(450) awk, Я говорю про разницу между указателем и ссылкой, ссылка не указывает на адрес где находится объект, а лишь указывает на заголовок объекта, а вот функция hashCode возвращает адрес на объект.
Returns a hash code value for the object. This method is supported for the benefit of hash tables such as those provided by java.util.HashMap.
The general contract of hashCode is:
Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.
It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.
As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the Java™ programming language.)
Returns:
a hash code value for this object.
(487) alex_sh2008,
1. Я знаю. Но кто тебе сказал, что в С++ недоиспользующийся хеш функции для сравнения значений?
2. Операцией "==" для объектов - нет. Переопределив equals - пожалуйста.
(503) spacecraft, Ну там по другому это называется, как такового наследования нет, и для каждого класса определяется своя статическая функция оператор.
(439) awk, неудачный пример. В 1С нет передачи объекта. Есть передача переменной по ссылке.
Идея понятна, но основывается на точки зрения, что передается не объект. Я не спорю и понимаю. Но и другую точку зрения тоже понимаю.
(445) spacecraft, Я уже говорил, что ССЫЛА_ЯВА != ССЫЛКА_СРР. ССЫЛКА_ЯВА == УКАЗАТЕЛЬ_СРР - адресная арифметика. ТУт надо для четкого понимания смотреть код на ассемблере/байт код - во что все это превращается.
(439) awk.
Официальная документация называет "их" ссылками. Сравнения с какими-то языками зачем?
Да в сравнении с какими-то там языками "ссылка" в жава "особенная". В том плане, что единожды её создав, все-таки можно поменять значение адреса, на которое она указывает. Т.е. это переменная хранящая значение адреса. Которое всегда можно поменять.
Мы знаем (а мы знаем?), при передаче параметра в метод создастся копия этого параметра. Если внутри метода мы попытаемся переопределить переданную ссылку, то внешняя ссылка не изменится. Поменяется лишь значение её копии внутри метода.
Всё так же, как и с параметрами, переданными по значению. Вот этот нюанс хочется подчеркнуть?
Какого дъявола отражать в терминологии особенность поведения ссылок. Ну раз уж мы читая доку называем эти "ссылки" ссылками.
Это ведь не передача по значению, это такие ссылки (которые можно переопределить).
Почему по значению? - В любом языке, внутри метода возникает техническая копия адреса. Есть другие предложения, где метод будет хранить переданный ему параметр?. Поэтому в любом языке ссылки передаются по значению. В отличии от жавы их просто переопределить нельзя.
Не стоит вносить ЭТУ мозгодротку в головы новичкам. Для которых жава по сути первый язык.
К тому-же в терминологии документации это "передача по ссылке".
Не стоит вносить ЭТУ мозгодротку в головы новичкам. Для которых жава по сути первый язык.
К тому-же в терминологии документации это "передача по ссылке.
ты че ! без этого важного знания даже hello world нормально не написать, а если попытаться это приведет к вселенской катастрофе и по всему миру рухнут сервера.