LINUX.ORG.RU

[JAVA] Как научиться правильно писать?

 


0

4

Здравствуйте. Не могу никак войти в ООП, так сказать, полным ходом.
Хотелось бы писать грамотный код на Java, а не то, что получается сейчас. Как подтянуться до нормального уровня? Стандартные книги, в которых разбираются if, while и for, не особо помогают, есть ли какая-то литература по Java, которая железной рукой наведет меня на путь истинный при создании архитектуры приложения, которое я хочу написать? Как только касается конкретного дела, я не понимаю, что должно быть классом, какие зависимости и наследование должно быть, чтобы все было грамотно. И в результате способен выдать только сотни говнокода, что печально.
Есть еще эффективные методы в этом деле? Разбирать грамотно написанный проект на Java? Где и какой следует найти?
Спасибо за внимание.

По своему опыту - после С++ понять яву вообще просто =)

Тебе нужно понять основные понятия ООП, что такое объект, что такое наследование и т.д. Тогда все у тебя получится.

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

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

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

Попробуй «в лоб» - берешь книжку (самоучитель) и пошагово начинаешь писать код. Все подряд главы. Там все это разжевано и правильно. Например, того же Шилдта книжку, говорят, хорошая.

А вообще аккуратнее с этим. Задумайся, а надо ли оно тебе. Я вот, например, с ума сошел. Иногда дажу думаю в стиле ООП (женщина - объект класса человек... и т.д.)

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

Шилдт писал книги по Java? Поизучаю.
У меня глупостей на каждом шагу вагон. В Java я более чем часто не понимаю, зачем мне нужен объект вообще и фигачу статическими методами/переменными. Наследование своих же классов применяется крайне редко. Как вот продумать архитектуру так, чтобы от изменения одного условия не приходилось бы переделывать все вычисления, как при этом использовать ООП, все эти вопросы не находят ответа в самоучителях аля серии «для чайников».

uRandom
() автор топика
Ответ на: комментарий от Zhbert

Там все это разжевано и правильно.

Несовсем.

Часто в учебниках по Java (и C++) допускают грубейшие ошибки нарушения инкапсуляции, как-то: для абсолютно всех полей класса делаются публичные геттеры и сеттеры, не раскрывается основное функциональное предназначение объекта — просто не публикуется функциональный API класса, ради которого, собственно, востребован сам объект в программе (а зачем? ведь геттеры и сеттеры и так есть :)) ).

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

ООП нужпо для упрощения написания программ, а не просто потому что это круто. Во многих простых приложениях никакие наследования своих классов и не требуются.

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

> Наследование своих же классов применяется крайне редко.

И это правильно. Наследование без особой на то нужды вредно. Лучше обходится по-возможности композицией объектов.

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


Искать функциональную составляющую в объектах. Каждый объект должен выполнять только одну определённую функцию через собственные взаимоувязанные методы и делать это хорошо.

Изучение архитектурных методов лучше начать с литературных трудов Мартина Фаулера (из серии про рефакторинг и шаблоны проектирования).
По техническим деталям реализации классов и интерфейсов в Java лучше почитать книжечки Джошуа Блоха.

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

+1

Хотя есть некоторые упорыши, которые ООП суют везде, где только можно. Даже для хэлловорда.

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

А практика использования статических методов, когда объект в общем-то не нужен, а объединить некий функицонал в класс хочется - это нормально?
За книги спасибо, буду изучать.

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

Нормально, в яве ведь нет функций отдельно от классов.

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

А практика использования статических методов

Об этом достаточно хорошо написал Джошуа Блох в книге «Java. Эффективное программирование».

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

> женщина - объект класса человек

Я надеюсь, ты о правильных женщинах думаешь с private-интерфейсами?

cipher ★★★★★
()

1. Прочитать Хорстманна оба тома.
2. Прочитать про паттерны.
3. Прочитать про рефакторинг.

З.Ы. честно начинал писать по Шилдту на java, теперь кусаюсь.. надо было начинать с п.1

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

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

Norgat ★★★★★
()

GoF уже советовали? Ну и Буча как пример

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

По сишарпу у него нормальная книжка. Других, правда, я не читал, но чтобы разобраться (естественно уже имя опыт работы на других языках) - хватило

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

Объект класса, наследованного от «женщина». Точнее нет, не так. Человек - базоавый класс (руки, ноги, голова). От него наследовано два класса - мужчина и женщина. Со своими параметрами помимо рук и ног (сиськи там, мпх). Лена - объект класса женщина, со своими параметрами сисек, мозгов и прочего. Тащем-та, можно все это шлубже расписать, но это уже на идиотизм будет походить.

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

> По сишарпу у него нормальная книжка. Других, правда, я не читал, но чтобы разобраться (естественно уже имя опыт работы на других языках) - хватило

Какая это у него нормальная по C#? Которая «Полное руководство»? По мне так сделана книга плохо - оч. плохая навигация в книге, да и написано невменяемо. Вон на полке пылится, когда нужно что-то освежить по языку - снимаю Троелсена с полки, вот у него то как раз всё хорошо описано.

Был аналогичный случай со справочником по C++, выбирал между Шилдтом и Лишнером, выбрал Лишнера и ни разу не пожалел.

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

>оч. плохая навигация в книге

Не замечал

> да и написано невменяемо

Воды много, да

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

А вот учить сишарп как первый язык с нулём знаний за спиной по этой книге я бы, наверно, не посоветовал :)

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

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

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

> А вот учить сишарп как первый язык с нулём знаний за спиной по этой книге я бы, наверно, не посоветовал :)

C#, как первый ЯП, вообще бред имхо)

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

Имхо, лучше Троелсен, хотя после C++ основы C# раскуриваются за вечер и 200 стр. практически любой книжки по этому языку) Вот только у Троелсена есть доп. информация о том, как работает CLR и что из себя представляют сборки и т.п.

Norgat ★★★★★
()

Вместо сладких снов за этими томами жабских книг, лучше прочитай SICP. Научишься функциональной декомпозиции, а там ООП прислюнить уже плевое дело.

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

Вы не первый из окружения программистов, кто советует мне эту книгу, видимо, стоит прислушаться. :)

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

Стоит не прислушаться, а начать читать немедленно. Я вот жалею, то в свое время не осилил. Теперь наверстываю.

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

Она от него наследована, стало быть, она почти что человек.

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

А как же членодевки и прочие трансгендеры?

Это объект класса унтерменш.

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

>А как же членодевки и прочие трансгендеры?

Вот. А этоу уже классы, наследованные от женщины и мужчины.

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

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

Короче бери kiss на вооружение.

mi_estas
()

есть например учебник для вузов http://www.deitel.com/Books/Java/JavaHowtoProgram9eEarlyObjectsVersion/tabid/... в котором разбирается все, от ABC до OOP и OOD, но мы же такие книжки для начинающих не читаем, мы же на C++ можем, нам туториал на 5 страничек подавай и завтра сдаем зачет а после отмечаем всей общагой. Совковое образование дает о себе знать, isn't it?

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

Ты правильно пишешь, но есть оди ньюанс. Чтобы сказать: «Так, а здесь мне пригодится Х», надо знать Х и уметь им пользоваться. Без этого необходимость Х будет неочевидна и относиться к Х автор будет как занудно-академической, совершенно бесполезной шняге.

ugoday ★★★★★
()

Domain Driven Design Эрика Эванса почитай.

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

> Вы не первый из окружения программистов, кто советует мне эту книгу, видимо, стоит прислушаться. :)

Советую сперва не прислушаться, а присмотреться.

Присмотреться к тем, кто вам советует SICP. Копнув поглубже, вы поймёте, что перед вами в большинстве своём неадекватные личности. Ибо только неадекват на просьбу посоветовать литературу по Java предложит книгу из совершенно другой области, описывающую иные вещи, базирующуюся на совершенно ином языке, абсолютно другой парадигмы. Это всё равно что вы попросите научить ваc линейной алгебре, а вам насоветуют дифференциальную геометрию. «Изучив дифф.геом., ты освоишь топологические пространства! А уж вся эта векторная чепуха сама собой приляпается!»

Мне могут возразить, мол, что SICP — это-де не какая-то геометрия, а Аз и Буки, Священное Писание, Книга Книг. Действительно, многие адепты рассматривают SICP как некий религиозный артефакт, дающий Просветление. Это — распространённый сектантский миф. Прочитав 300 страниц писанины, вы всего-навсего научитесь писать рекурсивные алгоритмы на причудливом устаревшем языке программирования.

Эти умения никак не пригодятся вам, если вы решили связать свой жизненный путь с Java. Так что думайте, решайте стоит ли тратить своё время на это сомнительное и даже опасное занятие — чтение SICP.

Почему «опасное»? Потому что, относясь к подобным советам всерьёз, вы сильно рискуете быть втянутым в маргинальные течения современного IT. Вы, судя по-всему, довольно юны и и мозг ваш мягок и податлив, а этот наркотик весьма аддиктивен. Так что, погрузившись в пучину «fringe computer science», вы рискуете получить неадекватную ориентацию и просто не найти работу в реальном мире.

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

Кстати, насчёт неадекватности «советчиков». Так, например, ugoday — неонацист, чего совершенно не скрывает. Комментарии, как говорится, излишни — просто призадумайтесь над этим.

anonymous
()

когда я поступил на работу жабо-девелопером, меня закидали книжками Core Java - библия Рефакторинг - Фаулера Совершенный код - Макконела читать именно в таком порядке - Фаулер хорошо, годно, раскрывает для чего и как надо составлять классы, интерфейся итд

TERRANZ ★★★★
()

«Писать правильный код» — не совсем та цель, что надо.

Хорошая цель — писать приложения. На Java.

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

Особенной подготовки на такую должность не требуется, только общие вещи: базовые алгоритмы (надоевшие всем сортировки-поиски), коллекции (списки-словари-множества) и базовое же понимание ООП (на словах, а не на коде).

Кроме того, ООП в Java далеко не вершина горы, и даже не краеугольный камень. Вершина — это разнообразные фреймворки (Spring, J2EE, GWT, Swing...), технологии сборки (maven), развёртывания и отладки, и прочая, и прочая. Т.е. инфраструктура Java-платформы, а не сам язык. Опять же, про нее лучше из реальной работы узнавать.

---

И еще про правильный код: он получится автоматически, с ростом опыта. Хоть и не сразу. Если какой-то приём в книжке показался искусственным — ну и фиг с ним. А через год, читая ту же самую тему, видно: «О, это же моя задача! Так вот как ее можно было решить! И в самом деле — изящно!», то это и есть то, что надо.

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

Позволь задать тебе несколько вопросов: 1. Насколько сильны твои убеждения, и на сколько серьёзно ты к ним относишься; 2. Расходятся ли твои дела с твоими убеждениями, в ином смысле, что ты такого сделал что бы ты сам или окружающие считали тебя неонацистом; 3. Почему ты считаешь что неонацизм не есть «что-то плохое»?

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

а это, как бэ, вообще как относится к программированию на жабке?)

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

чтобы можно было быстро клепать троллейбусы v2 и из запчастей троллейбусов-бывших-буханками быстро делать другие девайсы

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

Потому что java — специальный хлеб, заточенный под лепку троллейбусов.

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

А книжки правильные посоветовали: для начала — Хорстманн, будет куда подглядывать на первых порах, и «Effective Java» — просто шикарное руководство про правильное решение частых задач. В чём плюс — там не только доходчиво написано, как надо делать, но и пояснено, как делать не надо. Но книга для людей с определенным опытом.

Так что эти две книжки будут хорошим руководством для роста: первая в начале, потом, когда станет банальщиной — можно по достоинству оценить и вторую.

---

Да, и не нужно пренебрегать хорошей IDE. Ходят разные мнения, что лучше — Eclipse, Idea или Netbeans, но одну знать точно не помешает.

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

1. Насколько сильны твои убеждения, и на сколько серьёзно ты к ним относишься;

Сильны. Серьёзно.

2. Расходятся ли твои дела с твоими убеждениями, в ином смысле, что ты такого сделал что бы ты сам или окружающие считали тебя неонацистом;

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

Я --- русский националист, занимаюсь общественной и политической работой в рамках Русского Клуба «Национальный Интерес» (состою в административном комитете, возглавляю территориальную секцию) и этнополитического образования «Русские», где являюсь рядовым соратником.

3. Почему ты считаешь что неонацизм не есть «что-то плохое»?

Нет ничего более естественного чем любовь к своему народу.

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

Докатились. Фашня на ЛОРе. Всем в мойшину!

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