LINUX.ORG.RU

Java - посоветуйте примеры с подробным описанием

 , ,


3

3

Посоветуйте материалов, что посмотреть и что почитать, чтобы понять паттерны (фабрики, синглтон). Не общими фразами, как в целой куче учебников, не официозными определениями из википедии, а с конкретными примерами нормального рабочего кода, с подробным описанием, что там и для чего.

Кроме того интересует работа с DAO и JDBC - пока этот вопрос понимаю весьма поверхностно. Есть пара примеров, разбирал код, но написать сам с нуля пока не в состоянии.

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

Java-тред с двача читал, литературу всю по ссылкам собрал, читаю. Но догоняю не всё.

С советами вроде «java дерьмо», «иди займись чем-нибудь другим» сразу проходим мимо.

★★★★

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

Начинающий джавист, а в чем-то либо другом хотя-бы «начинающий» или выше?
Реализация на джаве мало чем отличается от других языков для большинства патернов. Наличия примера без понимания сути ничем не поможет. Сядь и напиши сам по формальному определению, по ходу разберешься.

FeyFre ★★★★ ()
Ответ на: комментарий от FeyFre

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

cnupm ()

даже я жаву осилил! не позорься так

der_looser ★★ ()

Нет таких материалов. Берешь и пишешь код с гуглом на перевес. Можешь прям сразу spring mvc + jdbc делать, там все поймешь. В общем в гугле все есть, статей полно. Смотри только этого года или минимум 2014.

А про алгоритмы и классы так это только с опытом через кучи ошибок придет, иначе никак.

unt1tled ★★★★ ()

Посоветуйте материалов, что посмотреть и что почитать, чтобы понять паттерны (фабрики, синглтон). Не общими фразами, как в целой куче учебников, не официозными определениями из википедии, а с конкретными примерами нормального рабочего кода, с подробным описанием, что там и для чего.

Классика: Design Patterns: Elements of Reusable Object-Oriented Software, Refactoring: Improving the Design of Existing Code, Patterns of Enterprise Application Architecture, Refactoring to Patterns.

Кроме того интересует работа с DAO и JDBC - пока этот вопрос понимаю весьма поверхностно. Есть пара примеров, разбирал код, но написать сам с нуля пока не в состоянии.

JDBC очень простая библиотека, разбирайся, ничего сложного там нет. DAO это архитектурный шаблон.

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

Пиши свой код, читай код хороших библиотек. Могу посоветовать Spring Framework. Напиши вебсайт с его использованием, при этом досконально разбирай весь код на уровне исходников, который ты так или иначе используешь. Быстро в любом случае не выйдет, несколько лет нужно, как минимум. Лучше всего попробовать найти работу младшим программистом и активно интересоваться тем, что приходится использовать.

Legioner ★★★★★ ()
Ответ на: комментарий от cnupm

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

ya-betmen ★★★★★ ()
Последнее исправление: ya-betmen (всего исправлений: 1)
  1. Разбираешься в работе паттернов/применении/etc (Design Patterns by GoF/Head First Design Patterns(там, ЕМНИП, примеры сразу на жабе)/etc, но чтобы было _все понятно_)
  2. Разбираешься в реализации по псевдо-коду/схемам/etc.
  3. Пишешь реализацию _сам_ на нужном тебе языке (жаба, но лучше сразу на нескольких, это отнимает мало времени, но дает большой профит в виде понимания разниц реализаций и специфик языка) опираясь на пункт 2.
  4. Ищешь диффы своей реализации с чужими: по ссылке анонимуса на гитбахе или с элементарных примеров на педикивии (там реализация в простом виде почти на каждом языке имеется) и анализируешь их.
  5. ...
  6. PROFIT!
znenyegvkby ()

Посмотри S.O.L.I.D не ведопикии и далее по необходимости.

anonymous ()

Линукс тут при чём?

anonymous ()
Ответ на: комментарий от anonymous

Опять?

 ekzotech@hp  ~/Projects  uname -a
Linux hp 4.4.33-1-MANJARO #1 SMP PREEMPT Fri Nov 18 18:06:44 UTC 2016 x86_64 GNU/Linux
ekzotech ★★★★ ()
Ответ на: комментарий от FeyFre

Нет, немного умею в php и Perl, пара хелловорлдов на rust, не более. Пока пытаюсь научиться мыслить именно в ООП, а то у меня в итоге всё сводится к тому, что появляется один супер-класс, который тянет всё одеяло на себя.

ekzotech ★★★★ ()
Ответ на: комментарий от unt1tled

Я пользуюсь гуглом, на многие вопросы ответ можно найти сразу в 1-2 ссылке.

ekzotech ★★★★ ()
Ответ на: комментарий от Legioner

О, спасибо, дружище!

Я понимаю, что за 1-2 месяца не выучить. У нас будут собеседования по окончании курса, надеюсь на уровне джуна вкатиться и учить дальше.

ekzotech ★★★★ ()
Ответ на: комментарий от ekzotech

а то у меня в итоге всё сводится к тому, что появляется один супер-класс, который тянет всё одеяло на себя.

Это лечится живительным MVC. Внутривенно прибивай молотком. В java это observer-observable.

unt1tled ★★★★ ()
Ответ на: комментарий от ekzotech

Не спасибо, не слушай его, он бред написал. Сродни «чтобы быть хакиром, прочитай все маны в линуксе, потом прочитай еще раз и будешь хакиром». Атупизм 80 lvl.

unt1tled ★★★★ ()
Ответ на: комментарий от unt1tled

Вот я как раз самостоятельно не могу написать решение для задачи создания токенайзера с observer-observable. То есть я вижу чужой код, понимаю что там делается. Но спроектировать сам с нуля - не могу.

ekzotech ★★★★ ()
Ответ на: комментарий от ekzotech

Оно на самом деле очень туго заходит в новичков. Зато когда поймешь, будет очень просто. Гугли.

Тут надо именно самому написать реализацию 1-2 раза.

unt1tled ★★★★ ()
Последнее исправление: unt1tled (всего исправлений: 1)
Ответ на: комментарий от anonymous

https://github.com/iluwatar/java-design-patterns

Заходим в https://github.com/iluwatar/java-design-patterns/tree/master/monad и сразу же проигрываем в голос:

https://github.com/iluwatar/java-design-patterns/tree/master/monad

Monad pattern based on monad from linear algebra

monad from linear algebra

Походу, чушок вообще не сечёт в теме.

anonymous ()
Ответ на: комментарий от ekzotech

Нет, немного умею в php и Perl, пара хелловорлдов на rust, не более

Тогда для джава и ООП еще не время, если хочешь что-то из себя представлять как разработчик, а не очередной индус. Вот тебе для начала:

https://www.amazon.com/Elements-Programming-Interviews-Java-Insiders/dp/15174...

http://rosettacode.org/wiki/Category:Programming_Tasks

https://github.com/jwasham/google-interview-university

Пока пытаюсь научиться мыслить именно в ООП

Вот оно на хрена тебе? Разберись сначала в основах - классических алгоритмах и структурах. И как только сделаешь какое-нибудь небольшое ПО в процедурном стиле на Си или Турбо Паскале. Только после этого переходи на ООП. Только тогда будет понимание зачем этот ООП был придуман и где он нужен, а где нет.

foror ★★★★ ()
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от anonymous

monad from linear algebra

Походу, чушок вообще не сечёт в теме.

А то что там реализовано к монадам из философии и теории категорий отношение имеет крайне слабое, как знать - может их реализация вдохновлена монадой из линейной алгебры. Честно говоря то что там сделано похоже на builder + парочка лямбд для «функционального» вида.

Что делать, словечко «монада» сейчас на слуху - приходится запихивать вместе с абстрактными фабриками и прочими обсерверами, иначе засмеют.

anonymous ()

две недели назад испытал «ярко выраженное» желание писать код и именно в ООП.
выбрал groovy как язык, с учетом, что никогда не имел дело с разработкой под джава, неделя ушла на изучение современной экосистемы.
я хочу поделиться своими выводами об изучении «джава» и ООП с нуля в 2016 году за прошедшую неделю:

java 20+ лет, ни у кого нет желание разжёвывать основы подробно и бесплатно.
очень много контента который показывает всё поверхностно с предложением приобрести за деньги ментора
если бы я выбирал java как инструмент для заработка — обязательно бы приобрел
далее список шагов, которые привели меня к определенному прогрессу

  • я прочел «The Object-Oriented Thought Process»
  • обратил внимание на работы Uncle Bob пробовал читать, но оказалось есть https://cleancoders.com
    он произвел очень сильный эффект, особенно https://cleancoders.com/episode/clean-code-episode-7/show
  • как уже советовали http://www.yegor256.com/ но без фанатизма, а то так и до AOP не долго докатиться, ещё он не любит data structures
  • MVP Java с более реалистичными примерами
  • писать тесты
  • UML
  • теперь о инструментах, которые возможно заменили мне ментора в какой то мере:
    • использовать Code Coverage Library чтобы писать тесты было проще
    • использовать Static Analysis Tools, в котором есть алерты на Cyclomatic Complexity, размеры методов и классов
      в моем случае нужно было настраивать все параметры в соответствие с советами Роберта Мартина
    • использовать SonarQube для контроля за этими алертами, после чего уже не получиться написать «один супер-класс, который тянет всё одеяло на себя» без огромного числа предупреждений, что твой код воняет
system-root ★★★★ ()
Последнее исправление: system-root (всего исправлений: 1)
Ответ на: комментарий от Deleted

потом Егора Бугаенко

Ты ещё Олега Бунина посоветуй.

anonymous ()

Наняться куда-нибудь джуном. Там тебе и практика, и синьор всё разжуёт если надо. Самый простой способ, ещё и деньги в карман будут капать.

Hater ★★ ()
Ответ на: комментарий от Deleted

потом Егора Бугаенко

чтобы поржать?

советы Егора всегда заканчиваются чем-то ужасным: например тем, как он предлагает писать программу в виде вложенных констуркторов

ему просто нужен другой язык, не джава

stevejobs ★★★★☆ ()

Посоветуйте материалов, что посмотреть и что почитать, чтобы понять паттерны (фабрики, синглтон). Не общими фразами, как в целой куче учебников, не официозными определениями из википедии, а с конкретными примерами нормального рабочего кода, с подробным описанием, что там и для чего.

1. Паттерны это не готовые блоки из которых можно построить любое приложение, это даже не шаблоны, а скорее подходы, просто подходы к решению проблемы. Потому в книжках о паттернах обычно вначале описывают проблему, а потом уже паттерн. Только въехать в проблему из примера без опыта очень не просто, даже можно сказать невозможно.

2. Куча паттернов уже используются в языках и фреймворках, если не читать книжку от банды четырех, то можно не знать, что в java листенер для события - Observer. StringBuilder - Builder, фильтры в ServletAPI - Chain of responsibility и т.д. Вывод: не читая книг по паттернам, но практикуя написание кода можно усвоить большинство паттернов, но не знать их названия.

Не фокусируйся на фабриках и синглитонах, найди интересную тебе задачу и пытайся решить всеми доступными способами. Очень давно я купил большую книгу по java и начал делать апплеты для браузера и gui на swing, было интересно. Сейчас и то и другое уже легаси на которое и смотреть не стоит, зато есть android, можно что-то для него написать.

а с конкретными примерами нормального рабочего кода

У тебя так много звезд, потому освой git и билд систему gradle или maven, ищи открытые проекты на github и тырь из них код, идеи, или просто используй как пример. Часто у открытых фрейморков и либ рядом можно найти samples, очень помогает.

Aber ★★★ ()
Ответ на: комментарий от stevejobs

Ох ё, какую древность ты поднял :) Для ТС уже думаю не актуально. А я ж целую пелену текста написал...

Aber ★★★ ()
Ответ на: комментарий от Aber

странно, оно было у меня в оповещениях. Может быть, баг ЛОРа?

stevejobs ★★★★☆ ()
Ответ на: комментарий от Aber

О, ништяк, полезные советы. Спасибо!

Я тут на пару месяцев отошёл от изучения Java. Освоил немного основы c++ просто для общего развития. Сейчас хочу освоить веб, а то немного что-то умею, и на этом дело заканчивается. Ну а после хочу продолжить изучение Java.

ekzotech ★★★★ ()
Ответ на: комментарий от Aber

Нормуль, актуально и ещё как. Тем более годные советы лишними никогда не бывают.

ekzotech ★★★★ ()

Посмотри содержимое архива src.zip из каталога установки OpenJDK8/9. Вот там реальные примеры промышленного уровня использования паттернов проектирования в Java.

iZEN ★★★★★ ()
Ответ на: комментарий от ekzotech

Изучать так изучать. Исходники OpenJDK - это хороший образец проверенного оттестированного кода. Зачем ориентироваться на какие-то поделки? Его, к тому же, можно собрать (например, это штатно предусмотрено в опциях настройки порта java/openjdk8 на FreeBSD) с системой автоматических модульных тестов и посмотреть, какие фичи тестируются и как.

iZEN ★★★★★ ()
Последнее исправление: iZEN (всего исправлений: 2)
Ответ на: комментарий от Hater

Нанялся джуном. Сеньера в проект не выделили. Дали еще одного джуна в тимлиды, теперь группа из 4 джунов разгребает 25к строк внутреннего проекта, написанного джуном и 10 раз переписанного джунами.

На проект, который пилили года 3 выделили 3 месяца и сказали «хотим конфетку». Хорошо, что проект написан в основном на GXT+GWT, а у последнего хорошие доки с описанием архитектуры.

Deleted ()
Ответ на: комментарий от Legioner

Могу посоветовать Spring Framework. Напиши вебсайт с его использованием

Я за пару месяцев так и не заставил работать пример сайта, делая его по вечерам-ночам на основе двух главных книг по спрингу... :(

bvn13 ★★★★★ ()
Ответ на: комментарий от bvn13

Странно, как ты так умудрился. Попробуй начать с официального PetClinic.

Legioner ★★★★★ ()
Ответ на: комментарий от iZEN

Посмотри содержимое архива src.zip ... промышленного уровня использования паттернов

Там только исходники jdk classpath. Конечно стандартные библиотеки можно смотреть, только в практическом смысле это не даст много, слишком сильно отличается задача создания конечного приложения от написания библиотеки. API для сложившихся систем состоит из компромиссов. Нужно сохранять совместимость со старым кодом, скорость предпочтительнее читаемости, заложена гибкость с кучей абстрактных классов и многоуровневыми иерархиями, а в практике нужно уходить от сложных иерархий. API не самое лучшее место для обучения тому как нужно писать код.

Aber ★★★ ()
Ответ на: комментарий от iZEN

Ты просто кладезь вредных советов. У меня 10 лет опыта работы над коммерческими проектами, я работал с людьми. И могу сказать, что те кто только обучается, смотря на фичу не поймет на кой она нужна. А у тестера была задача не бизнес-кейс написать, а обеспечить покрытие кода тестами, закрыть тикет и скушать печеньку.

Aber ★★★ ()
Ответ на: комментарий от Aber

JDK показателен и в том плане, как можно сохранять совместимость со сторонним кодом, написанным 20 лет назад. Причём эта совместимость обеспечивается перелопаченным на современный лад кодом, с сохранением API, а внутри него уже не старинная неонка, а современная функциональная малопотребляющая LED-лампа с поддержкой диммирования (лямбд).

iZEN ★★★★★ ()
Ответ на: комментарий от Aber

А ты молокосос, у которого молоко на губах не обсохло. Я изучаю Java с 1998 года, в 2001-2003гг занимался разработкой приложений для десктопов, потом для мобильников с J2ME. Так что повидал всякого говно-кода. И исходники JDK не склонен считать вредным примером архитектурных решений (паттернов проектирования) для долгоиграющих проектов.

iZEN ★★★★★ ()
Ответ на: комментарий от Legioner

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

bvn13 ★★★★★ ()
Последнее исправление: bvn13 (всего исправлений: 1)
Ответ на: комментарий от bvn13

Полмесяца это в часах сколько? Есть же официальный Reference, открываешь его и читаешь, там всё чётко указано, кто где куда и откуда.

Legioner ★★★★★ ()
Ответ на: комментарий от iZEN

примером архитектурных решений (паттернов проектирования) для долгоиграющих проектов.

Мне тяжело представить чего там можно подсмотреть. Стандартный classpath - куча несвязанных сущностей. Поправить Date в java нельзя, как и выкинуть, как и Vector, StringBuffer и т.д. Даже разработчики java этого сделать не могут. У них api является товаром и они тратят на него ресурсы.

Когда я пишу rest api, я смотрю как сделаны другие rest api. Если бы я писал фреймворк, я бы смотрел на то как написаны другие фреймворки. И если бы я писал свою стандартную библиотеку, я бы смотрел в jdk.

Aber ★★★ ()
Ответ на: комментарий от Aber

Унаследованные базовые сущности в Java ценны тем, что они опробованы в работе миллиарды раз и отрефакторены, оттестированы (вылизаны) до блеска. Класс java.util.Vector сейчас зависит всего от трёх базовых классов: java.util.function.Consumer, java.util.function.Predicate и java.util.function.UnaryOperator. Всё. Это самодостаточный синхронизированный контейнерный класс.

iZEN ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.