반응형
실습 ) 다음 시나리오에 맞게 프로그램을 작성하시오. 도형 |
*2019년 공주대에서 |
Diagram.cs
using System;
namespace 인터페이스_실습_도형
{
/// <summary>
/// 도형 - 추상 클래스
/// </summary>
public abstract class Diagram
{
readonly int id;//도형 ID, 주요 키로 사용
static int lastid;//도형 ID를 순차적으로 부여하기 위한 정적 멤버
/// <summary>
/// 생성자
/// </summary>
public Diagram()
{
lastid++;
id = lastid;//읽기 전용의 값은 선언문 혹은 생성자에서 설정할 수 있다.
}
/// <summary>
/// 그리다 - 추상 메서드
/// </summary>
public abstract void Draw();
/// <summary>
/// ID 속성 - 가져오기
/// </summary>
public int ID
{
get
{
return id;
}
}
}
}
Point.cs
using System;
namespace 인터페이스_실습_도형
{
/// <summary>
/// 점 - Diagram 형식에서 파생
/// </summary>
public class Point : Diagram
{
int x;
int y;
/// <summary>
/// 생성자
/// </summary>
/// <param name="x">x좌표</param>
/// <param name="y">y좌표</param>
public Point(int x,int y)
{
this.x = x;
this.y = y;
}
/// <summary>
/// 그리다 메서드 재정의
/// </summary>
public override void Draw()
{
Console.WriteLine("점({0},{1})", x, y);
}
}
}
Line.cs
using System;
namespace 인터페이스_실습_도형
{
/// <summary>
/// 선 - Diagram 형식에서 파생
/// </summary>
public class Line:Diagram
{
Point p1;
Point p2;
/// <summary>
/// 생성자
/// </summary>
/// <param name="x1">시작 점의 x좌표</param>
/// <param name="y1">시작 점의 y좌표</param>
/// <param name="x2">끝 점의 x좌표</param>
/// <param name="y2">끝 점의 y좌표</param>
public Line(int x1,int y1,int x2,int y2)
{
p1 = new Point(x1, y1);
p2 = new Point(x2, y2);
}
/// <summary>
/// 그리다 메서드 재정의
/// </summary>
public override void Draw()
{
Console.WriteLine("===선===");
Console.Write("시작 ");
p1.Draw();
Console.Write("끝 ");
p2.Draw();
}
}
}
IGetArea.cs
namespace 인터페이스_실습_도형
{
/// <summary>
/// 인터페이스 - 면적을 계산할 수 있다.
/// </summary>
public interface IGetArea
{
int GetArea();
}
}
Rectangle.cs
using System;
namespace 인터페이스_실습_도형
{
/// <summary>
/// 사각형 클래스 - Diagram 형식에서 파생, IGetArea 형식을 실현
/// </summary>
public class Rectangle:Diagram,IGetArea
{
int left;
int top;
int right;
int bottom;
/// <summary>
/// 생성자
/// </summary>
/// <param name="left">사각형의 왼쪽 좌표</param>
/// <param name="top">사각형의 상단 좌표</param>
/// <param name="right">사각형의 오른쪽 좌표</param>
/// <param name="bottom">사각형의 오른쪽 좌표</param>
public Rectangle(int left,int top,int right,int bottom)
{
this.left = left;
this.top = top;
this.right = right;
this.bottom = bottom;
}
/// <summary>
/// 면적을 계산하는 메서드 - IGetArea 인터페이스에서 약속한 메서드
/// </summary>
/// <returns>면적</returns>
public int GetArea()
{
int area = (right - left) * (bottom - top);
return Math.Abs(area);
}
/// <summary>
/// Area 속성 - 가져오기
/// </summary>
public int Area
{
get
{
return GetArea();
}
}
/// <summary>
/// 그리다 메서드 재정의
/// </summary>
public override void Draw()
{
Console.WriteLine("===사각형===");
Console.WriteLine("({0},{1},{2},{3})", left, top, right, bottom);
Console.WriteLine("면적:{0}", GetArea());
}
}
}
Program.cs
using System;
using System.Collections.Generic;
namespace 인터페이스_실습_도형
{
class Program
{
static void Main(string[] args)
{
List<Diagram> list = new List<Diagram>();
list.Add(new Point(10, 10));
list.Add(new Line(1, 1, 10, 10));
list.Add(new Rectangle(10, 10, 100, 100));
foreach(Diagram diagram in list)
{
Console.WriteLine("<{0}>", diagram.ID);
diagram.Draw();
}
}
}
}
반응형
'언어 자료구조 알고리즘 > 프로그래밍 실습' 카테고리의 다른 글
[C# 실습] 반도체 장비 관리 프로그램 - 3. 상세 구현 (0) | 2020.09.22 |
---|---|
[C# 실습] 반도체 장비 관리 프로그램 - 2. 프로토 타이핑 (0) | 2020.09.21 |
[C# 실습] 반도체 장비 관리 프로그램 - 1. 단일체 패턴 표현 (0) | 2020.09.21 |
[C# 실습] 반도체 장비 관리 프로그램 (0) | 2020.09.21 |
[C#] 컬렉션(Dictionary) 실습 - 도서 관리 프로그램 (0) | 2019.08.10 |
[C#] 컬렉션 실습 - IList 인터페이스 구현 약속한 컬렉션 (0) | 2019.08.09 |
[C#] 상속과 다형성 실습 - 학생, 학사학생, 마법학생, 운동학생 (0) | 2019.08.09 |
[C#] 상속과 다형성 - 상품, 할인상품 (0) | 2019.08.08 |
[C#] 상속과 다형성 실습 - 밴드(음악가, 피아니스트, 드러머) (0) | 2019.08.08 |
[C#] 캡슐화 - 학생 클래스 정의, 인덱서 포함 (0) | 2019.08.08 |