2015-10-15 3 views
1

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

Есть 3 типа форм:

1) circle : 
x-coordinate 
y-coordinate 
r-radius 
c-color 

2) square: 
x-coordinate 
y-coordinate 
s-side 
c- color 

3) line: 
x-coordinate 
y-coordinate 
x1-coordinate 
y1-coordinate 
c- color 

Какой тип данных лучше всего подходит для них? Должен ли я сделать класс формы и сделать круг, квадрат и линию как подклассы формы? Если да, могу ли я поместить все их в один файл класса?

В качестве примечания стороны: При создании каждой фигуры конструктор будет задан только maxX и maxY. Формируется автогенерация со случайными числами, которые будут оставаться в пределах (0,0, maxX, maxY). Их размеры также определяются пользователем. Я держу их от 1/10 до 1/3 или ширины экрана. Но они менее важные детали.

+0

Ваш подход выглядит нормально. Почему вы сомневаетесь в этом? –

+2

Тихие нисходящие нити бесполезны. –

+1

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

ответ

5

Вы могли бы иметь супер-класс под названием Shape, который будет иметь все общие свойства (x-coordinate, y-coordinate и colour).

Затем вы должны расширить этот класс классами Circle, Square и Line, в которых вы заполните дополнительные свойства, которые имеет каждый отдельный элемент. Рекомендуется, чтобы у вас был отдельный файл класса для каждого класса.

Этот подход позволит вам, например, создать List<Shape>, если вам нужно создать коллекцию фигур.

+1

И позволяет ему легко добавлять новый тип формы без особых хлопот. – Pavan

+0

Спасибо, это подтверждение, которое мне действительно нужно. Можно ли реализовать суперкласс и подклассы в одном файле? – theMobDog

+0

@theMobDog: вы можете объявить их, если объявить классы как частные, но я бы не рекомендовал его. Если вы хотите объявить свои классы как «общедоступные», вам нужно будет иметь их в отдельном файле. – npinti

1

Мои два цента:

Альтернативное представление, давая рамку (X0, Y0, X1, Y1) или (X, Y, W, H), независимо от типа фигуры.

Для сегментов линии, к сожалению, может быть своп (Y0 <=> Y1). Возможно, стоит выделить верхнюю и нижнюю (внутренне).

Для окружностей и квадратов вам необходимо принудительно установить ограничение X1-X0=Y1-Y0 или W=H.

Эта схема также удобна для выровненных по оси прямоугольников и эллипсов.

Независимо от того, используете ли вы один класс с полем типа или виртуализацией, в основном это вопрос вкуса.

+0

Спасибо, мне жаль, что у меня нет ни малейшего таланта. – theMobDog

0

В Java более или менее все является классом. Это не отличается в других структурах данных, которые вы, вероятно, используете, например, базовый набор и более мелкие гранулированные типы, такие как Treeset и Hashset. Все они - классы.

В вашем случае вам, вероятно, нужен абстрактный класс или интерфейс для реализации общей формы. Круги, квадраты, линии будут реализованы как «нормальные» классы, которые наследуются от Shape.

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

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

+0

Спасибо за указатель о классах и конструкторе. Я никогда не мог разобраться в «лучшей практике» и всегда идти с тем, что кажется правильным – theMobDog

0

Используйте длинный номер. Если вам нужны точные значения, используйте double и float.

0

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

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

Спасибо, theMobDog

Смежные вопросы