Войти
ФлеймФорумПрограммирование

Поясните за именование классов и интерфейсов в Java

#0
(Правка: 12:01) 11:59, 21 июня 2018

Я тут решил попробовать новый для себя ЯП и запилить рогалик.

В процессе работы быстро понял, что не плохо было бы иметь простенький текстовый GUI.
Сейчас у меня есть три класса:

TextBuffer - сюда пишутся символы и их цвет
Window - имеет TextBuffer, пишет в него, обрабатывает ввод
WindowManager - управляет окнами, передает ввод активному окну, рисует окна

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

Я начал читать про именования классов и интерфейсов:

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

WTF? Что значит так же?

Я так и не понял, как в моем случае нужно именовать классы и интерфейс?


#1
12:10, 21 июня 2018

Так же значит так же: https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html

public interface OperateCar { ...

#2
7:57, 22 июня 2018

Чётко же написано, что классы и интерфейсы именуются одинаково. В твоём случае можно, например так:

public interface Window {
    ...
}

public class StandardWindow implements Window {
    ...
}

public class ModalWindow implements Window {
    ...
}

#3
9:00, 22 июня 2018

обычно имя интерфейса начинается с I, но это просто хорошая практика, а не догма, а в остальном никаких отличий

#4
9:07, 22 июня 2018

Madware
>венгерская нотация
>2018
>хорошая практика
...

#5
9:41, 22 июня 2018

Maltakreuz
это не венгерская нотация

#6
(Правка: 10:18) 10:15, 22 июня 2018

Madware
> обычно имя интерфейса начинается с I, но это просто хорошая практика, а не
> догма, а в остальном никаких отличий
Это в крестах, а в джаве - классы и интерфейсы называются одинаково, потому что для внешнего наблюдателя класс функционирует точно так же, как и интерфейс.
Плюс заставляет программиста, вместо того, чтобы тупо лепить I куда попало, реально задумываться - а что же такого уникального в данной конкретной реализации? А может, в ней нет ничего уникального, и лучше вообще не рождать никаких интерфейсов?

Bizunow
А что именно должен делать твой интерфейс?

#7
13:12, 22 июня 2018

Delfigamer
В шарпе скорее. Потому что в крестах нет такой вещи как интерфейс.

Да, действительно, в джаве без I, почему-то я подумал что у нее с C# идентичный подход

#8
(Правка: 13:25) 13:18, 22 июня 2018

Madware

Потому что в крестах нет такой вещи как интерфейс.

Есть. Просто они в хеадер файлах прописаны самими Микрософт.
То есть как правило , программист часто не пользуется интерфейсами. Потому что за него это уже сделала сама Микрософт.
А вот когда прогер хочет привязать например Directx 11 к другому ЯП, то приходится возится с интерфейсами самому.

Главное отличие класса от интерфейса — в том, что класс состоит из интерфейса и реализации.

Любой класс всегда неявно объявляет свой интерфейс — то, что доступно при использовании класса извне.
Если у нас есть класс Ключ и у него публичный метод Открыть, который вызывает приватные методы Вставить, Повернуть и Вынуть, то интерфейс класса Ключ состоит из метода Открыть. Когда мы унаследуем какой-то класс от класса Ключ, он унаследует этот интерфейс.

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

https://www.codeproject.com/Articles/10553/Using-Interfaces-in-C

#9
13:31, 22 июня 2018

Ziltop
>
> Главное отличие класса от интерфейса — в том, что класс состоит из интерфейса и
> реализации.
Только, уже с JAVA8 интерфейс состоит тоже из реализации и объявление .

#10
(Правка: 14:11) 14:08, 22 июня 2018

Madware
> Потому что в крестах нет такой вещи как интерфейс.
Чего в крестах нет - это специального синтаксиса для описания интерфейсов, потому что в крестах интерфейс является частным случаем абстрактного класса.

Ziltop
> Главное отличие класса от интерфейса — в том, что класс состоит из интерфейса и реализации.
Это другое значение слова "интерфейс" - в котором оно используется в аббревиатуре "API".

#11
14:27, 22 июня 2018

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

#12
14:39, 22 июня 2018

Delfigamer
> А что именно должен делать твой интерфейс?
У меня есть два метода - draw и handleInput, они должны быть в любом окне. Вот для этого я и решил использовать интерфейс.

ФлеймФорумПрограммирование