("객체 지향적 사고를 전체적으로 적용 - 델파이 개발에 대해 이야기하기"의 3부)
처음 두 기사에서는 캡슐화와 관련된 주제를 논의했습니다. 여기서는 상속과 다형성에 대해 이야기하고 싶습니다.
상속과 다형성은 밀접한 관련이 있습니다. 오브젝트 파스칼은 오버로드라는 다형성 메커니즘을 도입합니다. 그 아이디어는 객체 지향과 거의 관련이 없으므로 여기서는 논의하지 않습니다. 우리는 객체지향적 사고와 밀접한 관련이 있는 다형성(Polymorphism)에 주목합니다.
다형성은 추상 메서드와 가상 메서드의 개념에 의존하며 상속과도 밀접한 관련이 있습니다. 우리는 종종 일부 기본 개체를 정의한 다음 일부 구현을 추상으로 정의한다고 생각됩니다. 이는 특정 구현 세부 사항을 정의하지 않고 인터페이스만 정의한다는 의미입니다. 이 아이디어에 따라 조상 클래스에서 구현되지 않은 세부 사항이 실제로 구현되는 여러 파생(상속) 개체도 정의합니다. 이는 이전에 정의한 기본 클래스를 다형성으로 만듭니다. 이 메커니즘의 장점은 이러한 클래스를 사용할 때 여러 기능을 완료하는 데 하나의 코드 세트만 필요하다는 것입니다. 변경해야 할 유일한 것은 개체의 인스턴스를 생성하는 부분입니다.
다음과 같은 수업을 관찰하세요.
TStream = 클래스(TObject)
…
공공의
함수 읽기(var Buffer; Count: Longint): Longint 추상;
함수 쓰기(const Buffer; 개수: Longint): Longint 추상;
…
끝;
가상 및 추상 예약어는 Read 및 Write 메서드가 순수 가상 함수임을 나타냅니다. 이는 TStream 클래스가 실제로 사용될 수 없음을 보여줍니다(이 클래스의 인스턴스는 생성될 수 없음). 이는 TStream 클래스가 가져야 하고 처리해야 하는 기본 기능을 정의하는 인터페이스와 유사한 클래스일 뿐입니다. 또한 TStream 클래스에서 파생된 다른 클래스가 기능(예: 읽기 및 쓰기 등)을 구현해야 한다고 규정합니다.
예를 들어, TFileStream은 디스크 파일 애플리케이션 형태로 TStream 클래스를 구현하는 반면, TMemoryStream은 메모리 애플리케이션 형태로 TStream 클래스를 구현합니다. 이제 SaveToStream 메소드를 제공하는 TMyClass 클래스가 있다고 가정합니다.
TMyClass = 클래스(TObject)
PRocedure SaveToStream(스트림: TStream);
끝;
그런 다음 다형성 개념을 적용하면 다음과 같은 코드를 만들 수 있습니다.
var
strm: TStream;
마이클래스: TMyClass;
시작하다
strm := TFileStream.Create('abc.txt'); // ß 여기서 Stream의 실제 인스턴스 유형은 TFileStream입니다.
MyClass := TMyClass.Create;
MyClass.SaveToStream(strm);
…..
끝;
MyClass의 내용을 메모리에 저장하려면 다음을 변경하십시오.
strm := TFileStream.Create('abc.txt');
을 위한:
strm := TMemoryStream.Create;
그게 다야.
다형성을 사용하려면 작업의 두 가지 측면이 필요합니다. 물론 하나는 클래스 구조에서 다형성을 고려하고 특정 기능을 구현하는 중간 클래스(추상 클래스)를 제공할 수 있다는 것입니다. 다른 하나는 이러한 중간 클래스를 사용하는 방법을 아는 것입니다. 이 작업은 함수의 일부 절차와 매개 변수를 정의하는 데 반영됩니다.
또 하나 매우 중요한 점은, 수업 계획이 매우 중요하다는 점을 다시 한 번 말씀드리고 싶습니다. 객체지향 프로그래밍 시대에는 클래스 프레임워크가 프로그램 프레임워크를 크게 결정하며 소프트웨어 개발의 성패를 결정합니다. 명확하고 계층적인 클래스 아키텍처는 기능 분할과 확장을 용이하게 할 뿐만 아니라 코드 유지 관리도 더 쉽게 만듭니다. 그 중에서도 상속과 다형성 개념을 적용하고, 추상 클래스를 도입하고, 중간 클래스를 도입하는 것이 더 바람직한 방법이다.
다음은 Delphi에서 제공되는 추상 클래스와 구상 클래스 중 일부 목록입니다.
추상 클래스에서 파생된 구체적인 클래스
TStream TFileStream, TMemoryStream;
TCustomIniFile TIniFile, TMemIniFile, TRegistryIniFile;
TStrings TStringList, TMemoStrings, TListBoxStrings;
당신과 내가 발견하기를 기다리는 더 많은 것들이 있습니다. 여기서 가장 일반적으로 사용되는 것은 TStream이고, 가장 놀라운 것은 TCustomIniFile입니다. TRegistryIniFile을 사용하면 IniFile과 동일한 방식으로 레지스트리에 액세스할 수 있습니다! 이를 통해 일련의 코드를 사용하여 레지스트리 작성 및 Ini 파일 작성 기능을 구현할 수 있습니다. 관련된 기술은 간단하지만 그 의미는 엄청납니다!
(미완성, 계속)
더 많은 기사