OOP에서 ‘추상’의 정의에 대해 혼란 age, String

OOP에서 ‘추상화’의 정의를 이해하려고합니다.

나는 몇 가지 주요 정의를 보았습니다. 모두 유효합니까? 그들 중 하나가 잘못 되었습니까? 혼란 스러워요. (나는 내 ​​자신의 말로 정의를 다시 썼다).

정의 1 :

추상화는 실제 세계에서 일부 객체를 가져 와서 프로그래밍 용어로 변환하는 개념입니다. 이러한 생성과 같은 Human클래스를 제공하고 int health, int age, String name등의 특성, 및 eat()등등의 방법.

정의 2 :

보다 일반적인 정의. 추상화는 ‘보다 일반적인 / 단순한 / 추상적 인 것 만들기’ 가 관련된 소프트웨어 시스템의 어느에서나 발생하는 개념입니다 . 몇 가지 예 :

  • 상위 계층이 더 단순하거나 일반적인 상속 계층 구조로,보다 일반적이고 추상적 인 구현을 정의합니다. 계층 구조의 하위 클래스는 더 구체적이고 더 자세한 구현을 정의합니다.

  • 캡슐화를 사용하여 클래스의 구현 세부 사항을 다른 클래스에서 숨기면 클래스를 외부 소프트웨어 세계에 대해 더 ‘추상적'(더 단순하게) 만듭니다.

정의 3

또 다른 일반적인 정의 : 추상화는 사물의 세부 사항 및 구체적인 구현에서 사물 유형 (예 : 클래스), 사용 가능한 작업 (예 : 메소드) 등으로 초점을 이동하여 프로그래밍을보다 간단하고 일반적으로 만드는 개념입니다. 그리고 더 추상적 인. (이는 소프트웨어 시스템의 어느 곳에서나 어떤 상황에서도 발생할 수 있습니다). 예를 들어 캡슐화는 구현의 세부 사항을 숨기고 사물의 유형과 더 일반적이고 추상적 인 정의 만 표시하기 때문에 캡슐화 할 때 발생합니다. Anotehr 예제는 ListJava 에서 객체를 사용하는 것 입니다. 이 객체는 실제로 ArrayLista 또는 a 의 구현 세부 사항을 사용 LinkedList하지만이 정보는보다 일반적인 이름을 사용하여 추상화됩니다 List.

이러한 정의 중 올바른 것이 있습니까? ( 가장 일반적이고 수용 가능한 정의를 말합니다).



답변

추상화는 객체 지향 프로그래밍 (OOP)의 3 가지 기둥 중 하나입니다. 문자 그대로 특정 관점에서 시스템이나 컨텍스트의 엔티티를 인식하는 것을 의미합니다. 우리는 불필요한 세부 사항을 취하고 해당 상황이나 시스템에 필요한 측면에만 중점을 둡니다.

다음은 좋은 설명입니다.

사람으로서의 역할은 다른 역할을합니다. 당신이 학교에있을 때, 당신은 “학생” 입니다. 직장에있을 때는 “직원” 입니다. 정부 기관에있을 때는 “시민” 으로 간주 될 수 있습니다 . 그래서 그것은 우리가 어떤 맥락에서 엔티티 / 객체를 바라보고 있는지로 요약됩니다. 따라서 급여 시스템을 모델링하는 경우 직원 (PRN, 풀 타임 / 파트 타임, 지정) 으로 간주됩니다 . 코스 등록 시스템을 모델링하는 경우 , 학생 (롤 번호, 연령, 성별, 코스 등록) 으로서 귀하의 측면과 특성을 고려할 것 입니다. 사회 보장 정보 시스템을 모델링하는 경우그런 다음 귀하의 세부 정보를 시민 (DOB, 성별, 출생 국가 등) 으로 살펴 보겠습니다 .

추상화 (필요한 세부 사항에 중점을 둔)는 캡슐화 (외부 세계의 세부 사항 숨기기)와 다릅니다. 캡슐화는 개체의 세부 정보를 숨기고 외부 세계의 개체가 해당 개체 또는 개체와 상호 작용할 수있는 적절한 인터페이스를 제공함을 의미합니다. 예를 들어, 누군가 내 이름을 알고 싶다면 내 뇌 세포에 직접 액세스하여 내 이름이 무엇인지 알 수 없습니다. 대신 그 사람이 내 이름을 물어볼 것입니다. 운전자가 차량 속도를 높이려면 해당 목적을위한 인터페이스 (가속기 페달, 기어 등)가 있습니다.

첫 번째 방어력은 명확하지 않습니다. 데프 2는 좋지만 추상화를 캡슐화 및 상속과 연결하려고 시도하면서 초보자를 혼동하는 경향이 있습니다. Def 3은 Abstraction을 정확하게 정의하기 때문에 3 개의 정의 중 최고의 것입니다.


답변

정의 1은 분명히 추상화가 아닙니다. 그것은 모델링을 더 자세히 묘사하고 있습니다.

정의 2와 3은 같은 것을 설명합니다. 그리고 둘 다 추상화에 대한 아주 좋은 설명입니다.


답변

이러한 정의는 훌륭합니다.

추상화는 목적에 중요한 세부 사항에만 중점을 둡니다.

첫 번째 경우, 현재 (현재) 코드에 실제 사람을 포함 할 수 없습니다. 당신은 당신의 목적에 봉사하는 사람의 특정 세부 사항에 초점을 맞 춥니 다. 다른 프로그램에서는 다른 세부 사항에 집중해야 할 수도 있습니다. 이것들은 사람의 다른 추상화이며 각각 의 맥락에서 똑같이 유효 할 수 있습니다 .

두 번째 및 세 번째 정의는이 개념을 계속해서 소프트웨어 엔터티에 적용합니다.