인터페이스
지금까지 없었던 문제를 해결하는 도구의 목적을 이해하기는 어렵습니다. 프로그래밍을 시작한 후 한동안 인터페이스를 이해하지 못했습니다. 우리는 그들이 한 일을 이해하지만, 왜 당신이 그것을 사용하고 싶은지 몰랐습니다.
여기에 문제가 있습니다. 원하는 것을 알고 있지만 여러 가지 방법이 있거나 나중에 수행 방식을 변경할 수 있습니다. 단서가없는 관리자의 역할을 수행 할 수 있다면 좋을 것입니다. 명령을 내리고 어떻게되는지 신경 쓰지 않고 원하는 결과를 얻을 수 있습니다.
작은 웹 사이트가 있고 모든 사용자 정보를 csv 파일로 저장한다고 가정 해보십시오. 가장 정교한 솔루션은 아니지만 엄마의 사용자 정보를 저장하기에 충분합니다. 나중에 사이트가 시작되고 10,000 명의 사용자가 있습니다. 아마도 적절한 데이터베이스를 사용해야 할 때입니다.
당신이 처음에 영리했다면, 당신은 이것이 오는 것을 보았을 것이고 csv에 직접 저장하기 위해 전화를하지 않았을 것입니다. 대신 구현 방법에 관계없이 필요한 작업을 생각할 것입니다. 하자의 말 store()
과 retrieve()
. 당신은 확인 Persister
을위한 추상 메소드와 인터페이스를 store()
하고 retrieve()
하고 만들 CsvPersister
실제로 이러한 방법을 구현하는 서브 클래스를.
나중에 DbPersister
csv 클래스와 실제 데이터 저장 및 검색을 완전히 다르게 구현 하는를 만들 수 있습니다 .
가장 좋은 점은 지금해야 할 일은 변화뿐입니다
Persister* prst = new CsvPersister();
에
Persister* prst = new DbPersister();
그리고 당신은 끝났습니다. 로 통화 prst.store()
와 prst.retrieve()
모든 정지 작업, 그들은 단지 "무대 뒤에서"다른 방식으로 처리하고 있습니다.
이제는 여전히 cvs 및 db 구현을 작성해야 했으므로 아직 보스의 사치를 경험하지 못했습니다. 다른 사람이 만든 인터페이스를 사용하면 실질적인 이점이 있습니다. 다른 사람이 이미 친절 CsvPersister()
하고 DbPersister()
이미 만들 수 있다면 친절하게 선택하고 필요한 방법을 호출하면됩니다. 다른 프로젝트를 나중에 또는 다른 프로젝트에서 사용하기로 결정한 경우 이미 작동 방식을 알고 있습니다.
나는 C ++에서 정말 녹슨 편이므로 일반적인 프로그래밍 예제를 사용합니다. 컨테이너는 인터페이스가 삶을 더 편하게 만드는 좋은 예입니다.
당신은 할 수 있습니다 Array
, LinkedList
, BinaryTree
, 등의 모든 서브 클래스의 Container
같은 메소드를 가지고있는 insert()
, find()
, delete()
.
이제 연결된 목록의 중간에 무언가를 추가 할 때 연결된 목록이 무엇인지 알 필요조차 없습니다. 그냥 전화 myLinkedList->insert(4)
하면 목록을 마술처럼 반복하고 거기에 붙입니다. 연결된 목록이 어떻게 작동하는지 알고 있더라도 (실제로해야 함) 특정 기능을 찾아 볼 필요는 없습니다. 아마도 Container
이전에 사용 했던 기능이 무엇인지 이미 알고 있기 때문일 것입니다 .
추상 클래스
추상 클래스는 인터페이스와 매우 유사합니다 (기술적으로 인터페이스 는 추상 클래스이지만 여기서는 일부 메소드가 포함 된 기본 클래스를 의미합니다).
게임을 만들고 있다고 말하면 적들이 플레이어와 눈에 띄는 거리 내에 있는지 감지해야합니다. Enemy
메소드가있는 기본 클래스 를 작성할 수 있습니다 inRange()
. 적에 대해서는 여러 가지가 있지만 범위를 확인하는 데 사용되는 방법은 일관됩니다. 따라서 당신의 Enemy
클래스는 사거리를 확인하기위한 다양한 방법을 가지지 만 적 유형과 유사하지 않은 다른 것들을위한 순수한 가상 방법을 갖게됩니다.
이것에 대한 좋은 점은 범위 감지 코드를 엉망으로 만들거나 조정하려는 경우 한곳에서만 변경하면됩니다.
물론 인터페이스와 추상 기본 클래스에 대한 다른 많은 이유가 있지만,이를 사용하는 몇 가지 이유가 있습니다.
싱글 톤
나는 때때로 그들을 사용하고 결코 그들에게 화상을 입지 않았습니다. 그것은 그들이 다른 사람들의 경험에 근거하여 어떤 시점에서 내 인생을 망치지 않을 것이라고 말하는 것은 아닙니다.
다음은 경험이 많고 조심스러운 사람들의 지구 상태에 대한 좋은 토론입니다. 지구 상태가
왜 그렇게 악한가?