카테고리 없음

[이런] UML에서 다형성 및 인스턴스를 어떻게 모델링합니까?

행복을전해요 2021. 2. 8. 18:58

충분히 간단합니다.

하나의 구체적인 클래스 Cage에 추상 클래스 Bird에 대한 참조가 있고 구체적인 클래스 Woodpecker와 Canary가 마지막 클래스에서 파생 된 경우 이것은 다형성입니다. 추상 클래스에는 인스턴스가 없기 때문에 새장에 실제로 앉을 새를 선택해야합니다. 인터페이스도 동일합니다.

여기에 이미지 설명 입력

-------------------

상속과 인스턴스의 문제는 기능에 따라 다릅니다. 오리와 다른 유형의 새간에 데이터 모델에 차이가있는 경우에서 Duck상속 하는 클래스 가 필요합니다 Bird. 그렇지 않으면 오리를 단순히 Bird.

다형성은 다른 Bird구현 에서 동일한 메서드를 호출 할 때만 작동합니다 .

UML 모델링의 경우 여기에 도움이되는 몇 가지 사항이 있습니다.

이 책은 많은 Software Engineeing 과정에서 반드시 읽어야하며 수년 동안 저에게 도움이되었습니다.

http://www.amazon.com/UML-Distilled-Standard-Modeling-Language/dp/0321193687

이 블로그는 다양한 사용 사례와 해당 OOP 모델을 잘 보여줍니다. http://usna86-techbits.blogspot.com/2012/11/uml-class-diagram-relationships.html

-------------------

첫째, 귀하의 질문은 다형성을 모델링하는 방법이라고 생각합니다. 설명을 위해 다음 Java 코드를 참조하십시오.

Drawable.java

package examples.simple.model;

public interface Drawable {
    public void draw();
    }
    

Shape.java

package examples.simple.model;

public abstract class Shape  implements Drawable {
    private Point center;
    
        public Point getCenter() {
                return center;
                    }
                    
                        public void setCenter(Point center) {
                                this.center = center;
                                    }
                                    }
                                    

Rectangle.java

package examples.simple.model;

public class Rectangle extends Shape {
    public void draw() {
            System.out.println("Drawing a rectangle....");
                }
                }
                

Circle.java

package examples.simple.model;

public class Circle extends Shape {
    public void draw() {
            System.out.println("Drawing a circle....");
                }
                }
                

Line.java

package examples.simple.model;

public class Line implements Drawable{
    public void draw() {
            System.out.println("Drawing a line");
                }
                }
                

Plotter.java

package examples.simple.client;

import java.util.ArrayList;
import java.util.List;

import examples.simple.model.Circle;
import examples.simple.model.Drawable;
import examples.simple.model.Rectangle;
import examples.simple.model.Shape;
import examples.simple.model.Line;

class Plotter {

    public static void main(String[] args) {
            List<Drawable> drawables = new ArrayList<Drawable>();
            
                    Shape s = new Circle();
                            drawables.add(s);
                            
                                    s = new Rectangle();
                                            drawables.add(s);
                                            
                                                    Line l = new Line();
                                                            drawables.add(l);
                                                            
                                                                    for (Drawable drawable : drawables) {
                                                                                drawable.draw();
                                                                                        }
                                                                                            }
                                                                                            }
                                                                                            

이것들은 다형성의 고전적인 예입니다. 클래스 다이어그램은

여기에 이미지 설명 입력

이 상황에서 시퀀스 다이어그램 을 사용하여 다형성 호출은 가드 조건에 의해 제어되는 다중 시나리오로 모델링됩니다. 따라서 각 다형성 시나리오에 대해 동적 바인딩 (다형성 호출)이 "시나리오 상자"로 표시됩니다. 따라서 이것은 다형성 호출을 보여주는 단일 모델 (시퀀스 다이어그램)입니다.

다형성 시나리오를 나타내는 시퀀스 다이어그램

마지막으로, UML을 사용하여 다형성 호출을 나타내는 것은 실제로 어려운 일입니다.



출처
https://stackoverflow.com/questions/22050320