Рекомендации по макету дизайна Java-программ? - PullRequest
9 голосов
/ 12 мая 2010

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

Моя интуиция приводит меня к использованию какого-то программного обеспечения для построения диаграмм, которое дает иерархическое представление всех классов и методов. Я использую OmniGraffle Pro, и, хотя кажется, что он работает, мне все еще сложно планировать программу целиком. Как мне подойти к этой проблеме? Какие программы доступны для решения этой проблемы? Есть что-нибудь хорошее по этому вопросу?

Большое спасибо!

Редактировать: О да, я использую Eclipse и сейчас пишу код в основном на Java.

Ответы [ 8 ]

12 голосов
/ 12 мая 2010

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

Это очень простой подход, и выпросить это некоторая методология анализа.Об этом написано целое количество книг, и это важная тема.

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

2 голосов
/ 12 мая 2010

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

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

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

2 голосов
/ 12 мая 2010

Существуют инструменты специально для такого рода проблем (например, Rational Rose). К сожалению, хотя они на несколько лет лучше, чем Omnigraffle, большинство из них довольно дороги. Есть несколько бесплатных инструментов, которые вы, возможно, захотите изучить, например ArgoUML и UMLet - хотя последний является плагином Eclipse, поэтому он, вероятно, не интересен, если вы Вы используете (или хотите использовать) Eclipse.

1 голос
/ 12 мая 2010

Рассмотрим философию объектно-ориентированного проектирования для методологии структурирования программ. UML или Unified Modeling Language, как правило, признается в качестве метода структурирования ОО-программ на таких языках, как Java и Python. Хорошие программы для таких как BoUML и ArgoUML . Дополнительно посмотрите на эту страницу по рефакторингу , хотя речь идет о реструктуризации кода, которая также может помочь с исходной структурой. Наконец, посмотрите на эти ОО дизайн принципалы

0 голосов
/ 13 мая 2010

Я бы добавил к комментариям Брайана, что, применяя гибкий подход, вы также применяете подход Test Driven Development (TDD) для написания своего кода. По сути, вы пишете тесты для своего кода до , когда вы пишете какой-либо действующий производственный код. Это действительно заставляет вас замедляться и задумываться о том, что вам нужно (и не нужно) для программирования, какие модели данных вам понадобятся и как они будут взаимодействовать. У TDD есть много преимуществ, но лучший дизайн - большой плюс для меня. Вот соответствующий фрагмент приведенной выше ссылки:

Разработка, основанная на тестировании, предлагает больше, чем просто проверка правильности, но также может повлиять на разработку программы. Сосредоточившись сначала на тестовых примерах, нужно представить, как функциональность будет использоваться клиентами (в первом случае, тестовыми примерами). Итак, программист занимается интерфейсом до реализации.

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

0 голосов
/ 12 мая 2010

Нужно знать о рецептах дизайна:

http://en.wikipedia.org/wiki/How_to_Design_Programs

0 голосов
/ 12 мая 2010

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

Когда я закончу, я делаю снимок своей камерой и загружаю его на компьютер для длительного использования.

0 голосов
/ 12 мая 2010

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

Есть также несколько бесплатных веб-приложений, которые делают моделирование для вас (объектное моделирование - это ключевое слово того, о чем вы говорите)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...