Pull to refresh

Comments 90

Я думаю вам стоило бы еще написать, а как это простое приложение запустить человеку который первый раз сел за Java.
Да я об этом подумал. Нужно добавить, хотя предположение что он уже умеет запускать приложение из среды. Хотя вполне логично.
Поддерживаю, лично у меня возникли проблемы с запуском приложения, когда решил посмотреть Java.
Я добавил небольшую секцию о запуске. Но видимо нужно об этом отдельно подробно рассказать — тем более что множество друзей спрашивали меня об этом в свое время. Думаю сделать про запуск отдельный подкаст или статью. Спасибо — благодаря вам я знаю что еще обсудить.
Думаю сделать про запуск отдельный подкаст или статью. Спасибо — благодаря вам я знаю что еще обсудить. — с нетерпением ждемс подкаста!!!
1. Не понимаю зачем это? Тот кто хочет выучить Java с нуля не сможет гуглем найти учебник в сети?
2. А без init() нельзя? А назвать его по другому можно? А без run() можно? А объект Application обязательно создавать?

Короче как то не по делу…
1. Не для тех кто учит с нуля. Когда я учил — у меня была такая проблема — все знаю — но не пойму с него начать создавать свои классы. Вот поэтому и написал статью эту. Людям не понятно как строить большое приложение с малого и с чего начинать. в Dolphin Smalltalk даже такой паттерн был — Application — в котором объяснялось создание подобного класса.

2. Про init и run — написал в ответе следующему комментатору. Можно и без них — но мы пытается как-то представить наше приложение из двух стадий — инициализация и запуск. Думаю нужно будет это дополнительно прокомментировать — спасибо за коммент!
Ну. И. Чушь.
Вот из-за такого рода туториалов я и охреневал первый месяц работы с Java.
Объясните человеку, который первый раз сел за IDE, зачем тут методы init() и run(). Ведь тут можно проще:
public class Application {
private CreditCalculator calculator;

public void run() {
calculator = new CreditCalculator();
calculator.setAmount(500000);
calculator.setYears(3);
calculator.calculate();
System.out.println("Месячный платеж: " + calculator.getMonthlyPayment());
}

public static void main(String[] args) {
Application application = new Application();
application.run();
}
}


А ведь можно и еще проще!
public class Application {

public static void main(String[] args) {
CreditCalculator calculator = new CreditCalculator();
calculator.setAmount(500000);
calculator.setYears(3);
calculator.calculate();
System.out.println("Месячный платеж: " + calculator.getMonthlyPayment());
}
}


Или это теперь на хабре модно, едва наваяв некомилируемый (закрывающая скобка пропущена) и невалидный (в выводимом сообщении нет пробела) хэлловорлд, тут постить его на хабр ради кармы? Впрочем, это вторично, а первично вот что: пока вы не объясните необходимость существования объекта, все эти init() и run() просто голимые понты, запутывающие пользователя.
> пока вы не объясните необходимость существования объекта, все эти init() и run() просто голимые понты, запутывающие пользователя.

Совет в точку! Да надо объяснить почему мы делаем именно так — потому что мы хотим чтобы приложение как и все в Java — было объектом.
А зачем придумали ООП по вашему? ООП позволяет структурировать систему по приципу взаимодействующих между собой клеток как в живом организме. Создателю ООП Алану Кею показалось это наиболее правильным чтобы создавать масштабируемые системы. Думаю расскажу про это отдельно. Спасибо за критику тем не менее.
Уважаемый, а где в вашем примере ООП?

Думаю расскажу про это отдельно — думаю не стоит…
Добавил про ООП. И почему мы создаем именно отдельный класс и инстанцируем его.
Или это теперь на хабре модно, едва наваяв некомилируемый (закрывающая скобка пропущена) и невалидный (в выводимом сообщении нет пробела) хэлловорлд
Вот с этим вы все-таки разберитесь, пожалуйста.
Разобрался. Спасибо. Все исправлено.
Думаю будет не лишним указать важность правильно назвать файл (в соответствии с именем класса), а также как скомпилировать и запустить пример из командной строки (из IDE конечно хорошо и удобно, но командная строка универсальней).
Это следует делать в тех IDE где это не сделано автоматически. В правильных IDE мы выбираем создать Class — и указываем его имя — Application — и IDE создает соотвествующий файл. Правильные IDE: Eclipse, Intellij IDEA, NetBeans, какой вы пользуетесь?
Нету «правильных» и «неправильный» пчёл IDE, есть средства подходящие в том или ином случае. Лично мне в большинстве случаев хватает Vim + командной строки. Но понятно это подойдёт далеко не всем. Я упомянул про ручную компиляцию, так как использование только IDE приводит к отсутствию понимания элементарных шагов сборки приложений, что плохо.
Я не рассматриваю Vim как не продуктивное средство. Нужно пользоваться лучшим что есть инструментом (не мои слова а Джоэля Спольски — знаете ведь его — правда) — а на текущий момент это Intellij IDEA.
Посмею дать небольшой совет, если вы пишете статью для широкой аудитории, то старайтесь придерживаться объективности.
Я не журналист. И не пишу журналистское расследование. А вы мне даете ссылку на понятие объективности в журналистике зачем-то.

Если с чем-то по существу несогласны напишите конкретно с чем как и почему.
Мне кажется вы статью опубликовали не на тот ресурс…
Иииии, я тоже вспомнил как начинал с явой знакомиться…
С вашей статьи, мммм, я не понял бы ничего…
имхо — методы run(), init() — дело вкуса.
Ну вот сейчас вы уже знаете Java отлично, вам понятно что к чему здесь? Правильно — Неправильно? Как же начинающий начнет правильно приложение структурировать и строить большой проект если его только hello -world'ами кормят. Меня ими в свое время тоже кормили — было непонятно — а потом прочитал про pattern Application и возрадовался.

Придется писать дисклеймер к статье — что это не для тех кто вообще не знает Java, а знает но не знает иногда с чего начать когда создается новое приложение.
Вы считаете, что как-то структурировали введя две функции? Мне кажется, чтоб показать что такое структурировать(капсуляция) — нужен проект побольше, а не класс в 15 строчек.

А что вам было не понятно? Мне кажется каждая книга начинается с того, что точка входа в программу main.

Ладн, этот спор все-равно ни к чему не приведет…
Удачи вам с дальнейшими публикациями — я с удовольствием почитаю.
Хотяяя, сомневаюсь, что на хабре пройдет еще парочка таких…
Я просто хотел показать что можно создать такой класс куда все остальные объекты можно подвязывать чтобы не выдумывать ничего своего — вот только сейчас это понял. Теперь надо будет подредактировать статью.

Если статью комментируют — то это уже хорошо :-) У меня есть возможность писать один раз неделю кажется :-)
Если статью комментируют — то это уже хорошо :-) — попрошу еще взять себе на заметку — «как комментируют». :)
Ну вот сейчас вы уже знаете Java отлично, вам понятно что к чему здесь? Правильно — Неправильно? Как же начинающий начнет правильно приложение структурировать и строить большой проект если его только hello -world'ами кормят. Меня ими в свое время тоже кормили — было непонятно — а потом прочитал про pattern Application и возрадовался.

Придется писать дисклеймер к статье — что это не для тех кто вообще не знает Java, а знает но не знает иногда с чего начать когда создается новое приложение.
Ваша модель организации, если можно ее так назвать, не говорит главное — зачем она такая? Зачем мы помещаем метод main в класс Application, зачем мы вообще создаем объект класса Application и что мы вообще хотели показать этим примером? К слову, таких примеров «старта», оторванных от какой-либо действительно практической необходимости, может быть сколько угодно много и смысловая нагрузка в них стремится к нулю.

Что касается новичков:
С чего начать создание приложения», какие классы использовать и прочее.

На подобные вопросы самым полезным ответом будет пойти узнать, что вообще такое классы, зачем они нужны и что такое ООП в принципе, ну и посоветовать пару книг, где эти ответы можно будет найти. Этим людям потом самим будет гораздо проще писать осмысленный код, который будет понятен не только им. А «Hello world» они и сами напишут.
Спасибо Сергей. Я напишу об этом.
Обратите внимание тогда еще и на запуск приложения. Вы писали о запуске из IDE, с этим справится каждый, благо если вы сели писать на java, то наверняка догадываетесь, что делает кнопка с надписью «Run». Гораздо более полезным будет описание запуска из консоли, для первого раза это может оказаться не совсем тривиальной задачей. Во-первых, так вы научитесь запускать и отлаживать свое приложение там, где нет вашей любимой ide, а во-вторых, сможете лучше разобраться в том, что такое байт-код и как вообще все это работает.
Хотелось бы пояснить. Нашей целью не является запуск приложения из консоли, Hello World пример, и что-то подобное.

Наша цель — показать с чего начать создание приложения и какие классы использовать. Зачастую многие просто пишут код в методе main — однако такой подход мне видится антипаттерном так как используется static метод и соответсвенно подвязка других бинов будет уже невозможна.
Однако я думаю посвятить запуску отдельный подкаст и приму ваш комментарий во внимание.
Это слишком сложно — какой-то оракловый тренинг. Ох как у бизнесменов все сложно :-) Проще нужно быть.
Это слишком сложно — какой-то оракловый тренинг. -вы не внимательны. :)
Ох как у бизнесменов все сложно :-) — эээээмммммм, проехали…
Ок, — тыцьну носом — www.youtube.com/playlist?list=PL4535B9D2F8203AC7
Теперь вижу. Курсы по джаве для начинающих, да. Ok. Буду иметь ввиду. Но что мне сразу не понравилось — Windows XP и фраза — «Нужно помнить что создатели Java были сишниками». Я с этим не согласен. Java создавалась потому что Xerox не дал Sun'овцам патент на Smalltalk. Ведь идеи виртуальной машины взяты оттуда, а C — только как синтаксис.
Но что мне сразу не понравилось — Windows XP и фраза — «Нужно помнить что создатели Java были сишниками». — предлагаю создать отдельную тему на хабре по этому вопросу. :):)
А чем же вам ХР не угодила?
Старая. Лучше Win 7, а еще лучше Mac :-)
Старая. — серьезный аргумент… Не попрешь… :)
А еще лучше «BolgenOS» — слышали о такой? :)
Стопудово! Линуксоиды и виндузятники первый раз за тысячу лет вместе, единым порывом, плачут кровавыми слезами и понимают, какие они ничтожества.
Линуксоиды и виндузятники всегда в одном месте — в дали от Mac OS. Но ничего страшного Java работает и на Linux и Windows, но к сожалению не все IDE. Например моя любимая Intellij IDEA на Linux не работает насколько мне известно.
Статья получила 7 минусовых балов. Число хорошее. А вот минус надо убрать.
Статья получила 7 минусовых балов. — это только начало… Наверное «начало конца..»…
Все прекращаю. Извините. Спасибо за улыбку перед сном.
Всем комментаторам спасибо. Собрал много комментов хороших — теперь понятно куда двигаться в следующих подкастах.

Главное что можно понять опубликовав статью здесь на хабре — это то, что я даже подумать не мог о деталях таких, о которых вы написали.
теперь понятно куда двигаться в следующих подкастах. — подкасты? А где можно прослушать вашы подкасты?
Подкаст Procode — подкаст про разработку и про код. Ссылка внизу статьи.
Я решил написать вам комментарий. Такой же как и ваш пост. Ни о чём.
public void init(){}
public void run(){}
public static void main(String[] args){}

И даже немного плюшечек:
javac recovery_mode.java;
java recovery_mode.class;


Господа комментирующие, как вы считаете, это тянет на отдельную статью? А то может кармы себе подниму, раз уж такая пьянка…
Господа комментирующие, как вы считаете, это тянет на отдельную статью?
— не то слово часовой подкаст.
А то может кармы себе подниму, раз уж такая пьянка…
— почему нет?.. Полезный комментарий…
Не тратили бы время. Просто бы минус поставили. Видно ваше время не дорого стоит.
Просто бы минус поставили.
— Зачем? Мне это никакого удовольствия не принесет.
Видно ваше время не дорого стоит.
эээмммм, глупость.
Это я mgrin'у. Не вам. Вы все по делу комментируете вроде.
Вы поймите, дело не во времени. И не в том, что пост мне не интересен (я прекрасно понимаю, что есть такие, как вы, пусть и не много вас, которым это бы помогло на первых этапах изучения Java). А в том что вот этоэто, и это) — статьи. А то что написали вы — идиотизм
Я эти статьи не писал — давайте не сравнивать так. Если с чем-то не согласны — прокомментируйте.

Может расскажите как вы структурируете свою программу в Java и с чего начинаете для начала? В тех статьях которые вы привели — там какой-то копи-паст зловеший — а я практически паттерн описываю уважаемый mgrin!
а я практически паттерн описываю
— даааа, а это уже серьезно…
Уважаемый. что же вы мне предлагаете самому догадываться за что меня критикуют читая 800 страничные книги, которые я уже давно прочитал когда вам 10 лет было. В частности Эккеля ценю. У него все разложено по полочкам и по делу. Хоть и большие книги такие не люблю, но книгу приятно читать.

Да, имейте ввиду что я книги про паттерны читал из первоисточника — от банды четырех и не только. И знаю кто такой Гамма, Бек, Фаулер и Кэннингэм и Джонсон c Влисидесем. И постоянно слежу за обновлениями в их блогах по теме.

Один ваш соратник — Mgrin — уже показал что его критика была не констуктивной — написал статью, в ответ на мою, которую потом удалил из-за несостоятельности.
Теперь я уж и не знаю, что вам посоветовать, ну разве что упомянуть в посте Эккеля, чтобы от статьи была хоть какая-то польза. Критиковать же некомпилируемый Hello world зачем-то усложненный неким «паттерном» я не вижу никакого смысла.
P.S. Когда мне было 10 лет, языка Java не было и в проекте.
> Критиковать же некомпилируемый Hello world зачем-то усложненный неким «паттерном» я не вижу никакого смысла.

Во-первых это не Hello World. Сделал пояснение в начале статьи. Во-вторых я не говорю пока про паттерн в статье, это я говорю только в комментариях. А в статье просто предлагается такой способ структурирования приложения с начальной точкой входа в классе Application. Если вы с этим не согласны, и например считаете, что отдельный класс не нужен и вообще приложения можно в одном большом static методе main писать — то можете прокомментировать и сообщить вашу точку зрения.

В дальнейшем я возможно попытаюсь развить этот подход и рассказать почему Application класс удобен — например для подвязки других бинов.
Вы меня немного не так поняли. По сути замечаний нет, это хороший тон написания приложения на Java, есть много примеров, в которых этот способ реализуется (Android, Java applet, да хотя бы Thread, да и, если на чистоту, это часть философии ООП — инициализация в конструкторе, работа в отдельном методе). Но это не статья для Хабра, 7 строчек кода + реклама подкаста и Intellij IDEA.

Через минут 30 — час выложу статью, пример того, что я хотел бы видеть под заголовком «Создание простейшего приложения на Java» три года назад, когда только начинал писать на Java
А вот это по делу — спасибо.

Да уж — чтобы пропиарить подкаст пришлось эту статью написать. Зато она теперь будет в поиске гугла по словам «C чего начать создание нового приложения в Java».

А кроме Хабра я не знаю где это публиковать — имхо такой ресурс резонансный на котором и комментаторы хорошие и индексация нормальная.

К тому же теперь могу давать статью эту тем, кому требуется помощь — дать прочитать — а потом объяснить в live-сессии.
Цель оправдывает средства — если вы про это. Но и статью то я не просто писал ради того чтобы что-то выдать — а тоже старался :-)
Я имею ввиду, что «вас» комментировать бесполезно, вы на свой планете…
Ну вот — наша статья уже первая в поиске Гугла. Пусть ее прочитают как можно больше народу. Еще надо будет написать про то что не нужно использовать static'и — а то помню как часами приходилось вычищать их из грязного кода :-)
Можно только посочувствовать тем, кто при изучении java натолкнется на эту статью.
Почему Сергей? Я же сказал что учту ваш комментарий и сделаю отдельный подкаст про запуск приложения для полный новичков, или вы с подходом использования класса Application не согласны, тогда как создаете приложение сами? Где пишете начальный код?
То, что вы здесь описали — это не подход, почему, я уже писал выше. Изучать java как и любой другой язык надо не с таких постов.

Вам здесь давали много полезных советов, но вы как-то не очень к ним прислушиваетесь, тем не менее, могу дать еще один: перенесите ваш пост в черновики, потому как в таком виде он не будет никому полезен. Но это, конечно, если для вас не было самым главным
Ну вот — наша статья уже первая в поиске Гугла.
Буду ждать статейку — интересно посмотреть как вам видится это.
Вы написали статью в которой взята моя концепция начала с класса Application. Далее добавили какой-то Hello World пример с планетами — который только перегружает восприятие и отдоляет читателя от идее. Вам справедливо откомментировали, что тратить время лишь бы насолить мне не стоит.

В итоге вы свою статью удалили, потратили уйму времени не к чему. Видно что у вас возникают трудности и вопросы — вот для таких как вы и была написана моя статья — именно с одного класса начинаем — и именно с методами init и run. А то вы сейчас понапридумывайте ненужных планет и статических методов и сингтонов.

Простите уважаемый — но вы показали мне полную не состоятельность — я то надеялся вы действительно напишете чего-то полезное.
Статьи которые вы привели — у меня тоже вызывают отторжение :-)
Вы понимаете, что Вас сейчас терпят в большей степени из-за уважения к себе и к ресурсу?
Лично я бы очень не хотел натолкнуться на эту статью, будучи начинающим изучать Java.
Уважаемый, Вы правила то хабра читали — если нет — пожалуйста — habrahabr.ru/info/help/rules/ и habrahabr.ru/info/help/other/.

Уважение к участнику — не должно быть вашей личной прихотью — а является правилом на Хабре.

Уважайте мнение других. Оно не обязано совпадать с вашим.

и

Каждый автор имеет свою индивидуальность, потому если вы уже где-то видели подобную статью, это не значит, что в сообщении нет ничего нового и интересного. Вчитайтесь и вдумайтесь — поймите авторское мнение.

и еще

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

Если есть конструктивная критика пишите, что не понравилось а потом минус ставьте и подобные комментарии.

:) Можно поинтересоваться откуда вы? Интересно в каком городе, городке, поселении такие люди обитают? — Никак не перехожу на личности.
> Никак не перехожу на личности.

Сразу заметно что не переходите по фразе «В каком поселении такие люди обитают».

Но могу вас обрадовать — не в такой деревне где позволительны такие сравнения.
:> Сразу заметно что не переходите по фразе «В каком поселении такие люди обитают».
ну я ж не могу утверждать, я предположил…
Раз по делу не хотите писать про класс Application, тогда скажите, вы на каком уровне знании Java находитесь, не мне так хотя бы себе.

1) Beginner
2) Junior
3) Programmer
4) Developer
5) Senior Developer
:) Умный человек понимает, что подобное сравнение или определение глупое!
Во-первых я не привык о себе говорить(оценивать) — пусть люди(знающие люди) скажут. Ко мнению которых прислушиваться стоит.
Во-вторых все зависит от того с кем(с чьими знаниями) сравнивать…

Или в java-конвенциях стоит строгое определение что должен знать юниор, а что сеньор? И так д… Но как я писал выше — habrahabr.ru/post/144617/#comment_4855642
В Java все довольно таки строго, наверно из-за простоты языка.

Эти степени довольно таки четко определены — взять хотя бы объявления по найму на работу. Да еще есть и классификация Sun — теперь Oracle, которая вводит различие между Programmer и Developer.

В кратце можно прокоментировать так:

1) Beginner — начинающий, понятно.
2) Junior — как правило используется фирмами для людей которые еще не знают Java профессионально, но знают какие-то основы и могут начать работать.
3) Programmer — пишет в основном код, но сам не разрабатывает архитектуру.
4) Developer — может уже разрабатывать дизайн архитектуры
5) Senior Developer — наиболее опытный Developer, который уже может проектировать серьезные проекты и отвечать за всю комманду.
В Java все довольно таки строго, наверно из-за простоты языка. — спасибо, оч полезная инфа. :)
В кратце можно прокоментировать так: — да будет так! :):)
Я же говорил, что комментировать «вас» бесполезно… :):)
Вы бы если б времени не теряли, то давно бы себя оценили и определились. Заниженная самооценка не очень хорошо, просто так вас никто не оценит, если не предпринимать действия. Если не знаете куда относитесь это самый запущенный случай :-)

Но ничего — вы поддержали беседу получше других молчаливых комментаторов. Так что не все потеряно :-)
Вы бы если б времени не теряли, то давно бы себя оценили и определились.
— а я разве говорил что не определился? Только не тонущие вещи плывут по течению, я же не вещь и сам для себя определяю путь.
Заниженная самооценка не очень хорошо, просто так вас никто не оценит, если не предпринимать действия.
— обязательно, заставляет задуматься. :):) Вы уже телепатом стали? Откуда вы берете такие познания? «Заниженная самооценка»? :):) Вы лучше 100 раз перечитайте написанное здесь, — а вдруг! И «лампочка» загорится…
Если не знаете куда относитесь это самый запущенный случай :-)
— к какому врачу обращаться? Или мне уже ничего не поможет? :)
Но ничего — вы поддержали беседу получше других молчаливых комментаторов.
— вам известно такое выражение(слово) как «троллинг»? :):)
Так что не все потеряно :-)
— я безмерно счастлив такой похвале… ::):):)
Что-то список узковат :)

6) Senior Java Architect
7) Senior Java Developer Evangelist
Ну мы не замахиваемся так далеко пока :-) Хотя я думаю будет интересно людям узнать что есть и такие — наверно их не так много :-) я про Evangelist
Если вы имеете ввиде пространства имен, то namespace это в C# и C++ скорее, а в Java используется package. Здесь мы используем пакет по умолчанию и файлы находятся в корне проекта.

Конечно хорошим тоном было бы использовать пакет вида com.procode.simpleapp, но мы опускаем это для простоты — тем более что мы создаем простейшее приложение.
Sign up to leave a comment.

Articles