shatov
@shatov
1C

Как решить данную задачу корректно?

Решил задачу. Всё работает. Но преподаватель указал некоторые ошибки. Вот условие задачи:

Задание 1. Написать класс Round, задающий круг с указанными координатами центра, радиусом, а также свойствами, позволяющими узнать длину описанной окружности и площадь круга. Обеспечить нахождение объекта в заведомо корректном состоянии. Написать программу, демонстрирующую использование данного круга.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var circle = new Circle();
            circle.Radius = 10;
            Console.WriteLine("Координаты x = {0} , y = {1}  " , circle.X , circle.Y);
            Console.WriteLine("Площадь круга = {0}" , circle.GetArea);
            Console.WriteLine("Длина  = {0}" , circle.Length);
        }

        public class Circle 
        {
            private double x, y , r;
            public double Radius
            {
                get 
                {
                    return r;
                }

                set 
                {
                    x = y = 0;
                    if (value <= 0) { throw new ArgumentException (" Wrong! ") ;}
                    r = value;
                }
            }

            public double GetArea
            {
                get
                {
                    return Math.PI * r * r;
                }
            }

            public double Length
            {
                get
                {
                    return 2 * Math.PI * r;
                }
            }

            public double X
            {
                get
                {
                    return x;
                }
            }

            public double Y
            {
                get
                {
                    return y;
                }
            }
        }
    }
}
  • Вопрос задан
  • 4187 просмотров
Пригласить эксперта
Ответы на вопрос 3
@iwanerhov
Программист С/C++
C++ отличается от С# поэтому поменяйте тэг
class Round
{
private:
	double _x;
	double _y;
	double _radius;

public:
	Round(double x, double y, double radius)
	{
		_x = x;
		_y = y;
		_radius = radius;
	}

	Round(){}

	double GetAbscissa()
	{
		return _x;
	}

	double GetOrdinate()
	{
		return _y;
	}

	double GetRadius()
	{
		return _radius;
	}

	double GetSquare()
	{
		return M_PI * _radius * _radius;
	}


};
Ответ написан
Комментировать
@brutal_lobster
Ошибки такие же как и в других задачах - почитайте книжку по ООП - особенно в части инкапсуляции.

У окружности только два параметра - координаты центра и радиус. Их вы должны передавать при создании объекта. После создания их нельзя изменять напрямую.
Если есть необходимость, то можно создать два доп. метода - move() и enlarge()/shrink()/...

Ну и форматирование, сериализация..
Ответ написан
scottparker
@scottparker
комментарии к коду, это лично мое мнение
public class Circle 
        {
            private double x, y , r;  
            public double Radius   //Имя инициализатора должно соответствовать имени поля 
//которое он инициализирует, логичнее поле назвать radius
            {
                get 
                {
                    return r;
                }

                set 
                {
                    x = y = 0;   //Почему в инициализаторе радиуса, инициализируются 
//координаты центра круга? и почему они именно равны нулю? 
                    if (value <= 0) { throw new ArgumentException (" Wrong! ") ;}
                    r = value;
                }
            }
//Возможно следовало бы написать конструктор с параметрами 
            public double GetArea
            {
                get
                {
                    return Math.PI * r * r; //Доступ к полям проводить через инициализаторы 
                }
            }

            public double Length
            {
                get
                {
                    return 2 * Math.PI * r;
                }
            }

            public double X
            {
                //set?
                get
                {
                    return x;
                }
            }

            public double Y
            {
                //set?
                get
                {
                    return y;
                }
            }
        }
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы