Java - вынос реализации из описания класса

320
09 января 2017, 20:51

На C++ привык оформлять классы следующим образом

(в заголовочном файле)

class MyClass
{
public:
    MyClass();
    void Method1();
    void Method2();
private:
    ...
}

Саму реализацию при этом выношу в .cpp или (в случае с header-only библиотеками) объявляю как inline и выношу ниже по тексту, отделив комментарием типа:

/*****************************/
/* Реализация класса MyClass */
/*****************************/

Это позволяет человеку, читающему мой код, быстро изучить интерфейс класса, не вдаваясь в подробности реализации.

Однако, начав изучать Java, аналогичной возможности не нашёл, и очень не хватает способа написания классов с удобно обозреваемой функциональностью. Лучшее, что посоветовали знакомые - описывать отдельно интерфейс и реализовывать его, но для классов, используемых однократно это, IMHO, overkill. Есть ли в Java способ описывать простые классы читабельно, с разнесённым объявлением и реализацией?

Update1: из комментариев стало ясно, что в Java транслятор такой возможности не предоставляет, но аналогичную функцию выполняет javadoc: либо в заголовке файла в Documentation Comments (преимущество: это первое, что видит человек, читающий код), либо после каждой сигнатуры функции (пока не понял, перед телом или после него. Преимущество: документация привязана к описанию функции). Поэтому пока непонятными остаются два момента:

  1. Как заставить IDE (Intellij IDEA) генерировать документацию для функций с подстановкой параметров, аналогично тому, как это делает Eclipse?
  2. Как заставить javadoc (или javadoc-plugin) отслеживать соответствие документации и кода чтобы, к примеру, при компиляции после изменения списка параметров функции выдалось хотя бы предупреждение?
Answer 1

В java такой возможности нет. Вы можете облегчить чтение своего кода, если будете придерживаться соглашений. Например, Java Code Convention

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

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

Answer 2

Сам по себе язык Java такой возможности не дает, и это, конечно, создает определенное неудобство. Однако современные IDE практически сводят это неудобство на нет. Вот как выглядит, например, фрагмент кода при работе в Eclipse:

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

Заготовка для комментария (JavaDoc) со списком параметров формируется автоматически при вводе начальных символов (/**).

Кроме того, в левой панели (Package explorer) показана структура класса -- ее можно настроить, чтобы там были показаны, например, только публичные методы.

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

READ ALSO
VKSdk - получение и обработка сообщений

VKSdk - получение и обработка сообщений

Добрый деньДелаю тут одну программу, с использованием VKSdk

314
Не прибавляются переменные. Java [требует правки]

Не прибавляются переменные. Java [требует правки]

Не прибавляется цифрыНапример, если я введу 2 + 2, то получится 2

337
Как передать данные из адаптера в Activity через тэг View

Как передать данные из адаптера в Activity через тэг View

Пробую передать данные в Activity способом из этого ответаВ массиве myStr сейчас всегда оказывается последний элемент ListView

336