data abstraction c
C ++의 추상화에 대해 알아야 할 모든 것.
이 C ++ 시리즈 튜토리얼에서는 OOP의 네 가지 기둥으로 알려진 C ++의 객체 지향 프로그래밍의 모든 주요 개념을 배웁니다.
- 추출
- 캡슐화
- 계승
- 다형성
이 자습서에서는 C ++의 데이터 추상화에 대한 모든 것을 살펴 봅니다.
=> Absolute C ++ 교육 시리즈를 보려면 여기를 클릭하십시오.
학습 내용 :
추상화 란?
추상화는 사용자에게 구현 세부 사항을 숨기고 필요한 인터페이스 만 노출하는 객체 지향 프로그래밍 기술입니다.
에어컨 (AC)의 실제 예를 들어 보겠습니다. 시작, 정지, 온도 상승 / 감소, 습도 조절 등 다양한 AC 기능을 제어 할 수있는 리모컨이 있습니다. 이러한 기능은 버튼의 시계만으로 제어 할 수 있지만 내부적으로는 복잡한 로직이 있습니다. 이러한 기능을 수행하기 위해 구현되었습니다.
그러나 최종 사용자로서 우리가 노출 한 것은 원격 인터페이스 뿐이며 이러한 모든 기능의 구현 세부 사항은 아닙니다.
추상화는 객체 지향 프로그래밍의 네 가지 기둥 중 하나이며 거의 모든 OOP 솔루션은 추상화 원칙, 즉 프로그램에서 인터페이스 및 구현 세부 사항의 분리를 기반으로합니다.
위의 다이어그램에서 우리는 객체와 그 내용을 그림으로 표현했습니다. 이 객체의 가장 안쪽 레이어는 핵심 기능과 구현 세부 사항이라는 것을 알 수 있습니다.
OOP에서이 두 계층 (대부분의 경우 하나의 계층에 불과 함)은 외부 세계에 노출되지 않습니다. 가장 바깥 쪽 계층 인 인터페이스는 객체의 기능에 액세스하기 위해 최종 사용자에게 제공되는 계층입니다.
결과적으로 사용자에게 노출되는 인터페이스가 동일하게 유지되는 한 객체의 가장 안쪽 레이어에 대한 변경 사항은 최종 사용자에게 분명하지 않습니다.
C ++에서 추상화 구현
C ++는 매우 깊이있는 추상화를 지원합니다. C ++에서는 우리가 사용하는 라이브러리 함수조차도 추상화의 예로 간주 할 수 있습니다.
다음과 같이 C ++에서 추상화 구현을 나타낼 수 있습니다.
위 그림에서 볼 수 있듯이 두 가지 방법으로 C ++에서 추상화를 구현할 수 있습니다.
# 1) 클래스 및 액세스 지정자 사용
액세스 지정자 public, private 및 protected와 함께 C ++로 구현 된 클래스는 추상화 구현으로 간주 될 수 있습니다.
이미 알고 있듯이 액세스 지정자를 사용하면 클래스 멤버에게 부여 된 액세스를 제어 할 수 있습니다. 일부 멤버를 비공개로 설정하여 클래스 외부에서 액세스 할 수 없도록 할 수 있습니다. 파생 된 클래스에만 액세스 할 수 있도록 일부 멤버를 보호 할 수 있습니다. 마지막으로 일부 멤버를 공개하여 이러한 멤버가 클래스 외부에서 액세스 할 수 있도록 할 수 있습니다.
이 개념을 사용하면 private access specifier를 사용하여 구현 세부 사항을 외부 세계에서 숨기고 공용 지정자를 사용하여 인터페이스를 외부 세계에 노출 할 수있는 방식으로 추상화를 구현할 수 있습니다.
따라서 C ++로 추상화를 구현할 수 있습니다. 클래스를 사용하여 데이터와 함수를 단일 단위로 묶고 액세스 지정자를 사용하여 이러한 데이터와 함수에 대한 액세스를 제어 할 수 있습니다.
이를 증명하기 위해 다음 예제를 구현해 보겠습니다.
#include #include using namespace std; class sample { int num1,num2; void readNum(){ cout<>num1; cout<>num2; } public: void displaySum() { readNum(); cout<<'
Sum of the two numbers = '< 산출:
num1 : 10 입력
num2 : 20 입력
두 숫자의 합 = 30
위의 프로그램에는 두 개의 정수 변수 num1과 num2가있는 샘플 클래스가 있습니다. 또한 readNum 및 displaySum 두 가지 함수가 있습니다. 데이터 멤버의 num1 및 num2와 readNum 함수는 클래스 전용입니다.
displaySum 함수는 클래스에 공개됩니다. main 함수에서 우리는 sample 클래스의 객체를 만들고 두 숫자를 읽고 그 합계를 출력하는 displaySum을 호출합니다.
이것이 추상화 구현입니다. 우리는 하나의 함수 만 공개하고 다른 데이터 멤버와 함수는 랩핑하지 않습니다. 이것은 추상화를 보여주는 예제 일 뿐이며 실제 문제를 구현하는 동안 C ++에서 여러 수준의 추상화를 가질 수 있습니다.
# 2) 헤더 파일 구현 사용
C ++ 프로그램에서 헤더 파일을 사용하여 미리 정의 된 함수를 가져오고 사용합니다. 이를 위해 #include 지시문을 사용하여 프로그램에 헤더 파일을 포함합니다.
예를 들어, 위의 프로그램에서 우리는 cin과 cout 함수를 사용했습니다. 이러한 기능에 관한 한, 우리는 그것들을 사용하는 방법과 그들이 취하는 매개 변수 만 알고 있습니다.
이러한 함수가 호출 될 때 백그라운드에서 어떤 일이 발생하는지 또는 iostream 헤더 파일에서 어떻게 구현되는지 알 수 없습니다. 이것은 C ++에서 제공하는 또 다른 추상화 방법입니다.
우리는 헤더 파일에서 가져온 모든 함수의 구현에 대한 세부 정보를 알지 못합니다.
추상화를 보여주는 또 다른 예가 있습니다.
#include #include using namespace std; class employee{ int empId; string name; double salary,basic,allowances; double calculateSalary(int empId){ salary = basic+allowances; return salary; } public: employee(int empId, string name,double basic,double allowances): empId(empId),name(name),basic(basic),allowances(allowances){ calculateSalary(empId); } void display(){ cout<<'EmpId = '< 산출:
EmpId = 1 이름 = Ved
직원 급여 = 18245.4
이 예에서는 empId, 이름, 기본 및 수당과 같은 급여 세부 정보와 같은 개인 정보가있는 클래스 직원을 정의했습니다. 또한 기본 및 수당을 사용하여 급여를 계산하는 개인 함수 'calculateSalary'를 정의합니다.
특정 직원 객체에 대한 모든 데이터를 초기화하는 생성자가 있습니다. 또한 생성자에서 'calculateSalary'함수를 호출하여 현재 직원의 급여를 계산합니다.
다음으로 empId, 이름 및 급여를 표시하는 '표시'기능이 있습니다. main 함수에서 employee 클래스의 객체를 생성하고 display 함수를 호출합니다.
이 프로그램에서 제공 한 추상화 수준을 명확하게 볼 수 있습니다. 우리는 모든 직원 세부 정보를 숨기고이를 비공개로 설정하여 사용자로부터 calculateSalary 기능을 숨겼습니다.
직원 객체에 대한 모든 정보를 사용자에게 제공하는 기능 디스플레이를 사용자에게 노출하는 동시에 개인 데이터 및 직원 급여 계산 방법과 같은 세부 정보도 숨 깁니다.
소프트웨어 테스트의 테스트 유형
이렇게하면 향후 세부 사항을 추가하고 급여 계산 방식을 변경하려는 경우 표시 기능을 변경할 필요가 없습니다. 사용자는 이러한 변경 사항을 인식하지 못합니다.
추상화의 장점
다음은 추상화의 장점 중 일부입니다.
- 프로그래머는 저수준 코드를 작성할 필요가 없습니다.
- 추상화는 악의적 인 사용과 오류로부터 내부 구현을 보호합니다.
- 추상화는 코드 중복을 방지 할 수 있으므로 프로그래머는 동일한 작업을 반복해서 수행해야합니다.
- 추상화는 코드 재사용을 촉진하고 클래스 데이터 멤버를 적절하게 분류합니다.
- 프로그래머는 최종 사용자의 지식 없이도 클래스 구현의 내부 세부 사항을 변경할 수 있으므로 외부 계층 작업에 영향을주지 않습니다.
결론
추상화는 OOP에서 가장 중요한 개념 중 하나이며 C ++에서 매우 심도있게 구현됩니다. 추상화를 사용하면 프로그램의 구현 세부 사항을 랩핑으로 유지하고 원하는 세부 사항 만 외부 세계에 노출 할 수 있습니다.
추상화 개념을 사용하여 전체 솔루션이 구축 된 프로그래밍 솔루션의 골격 역할을하는 추상 데이터 유형 및 클래스를 설계 할 수 있습니다. OOP 주제를 진행하면서 이러한 유형과 클래스에 대해 자세히 알아볼 것입니다.
다가오는 튜토리얼에서는 OOP의 또 다른 기둥, 즉 캡슐화에 대해 배울 것입니다. 또한 추상화와 캡슐화를 함께 고려할 것입니다.
=> 여기에서 전체 C ++ 교육 시리즈를 찾아보십시오.
추천 도서