PicoLisp 탐색: 객체용 프로그래밍, 섹션 1

오늘은 PicoLisp에서 객체 지향 프로그래밍의 가능성을 살펴보겠습니다.
비록 Edsger Dijkstra(나는 대상을 대상으로 프로그래밍하는 것이 나의 우아한 기준에 부합되는 구조화된 범례라고 생각하지 않는다)가 파멸적인 판단을 내렸지만, 우리는 OOP가 실제로 매우 유용한 몇 가지 상황을 발견할 수 있다. 물론!
PicoLisp의 객체 지향 개념을 살펴보겠습니다.

무엇이 대상을 대상으로 프로그래밍합니까?
Object-oriented programming는'대상'개념을 중심으로 하는 프로그래밍 모델로 데이터(일반적으로 속성)와 코드(일반적으로 방법이라고 부른다)를 포함할 수 있다.이러한 대상은 일부 클래스의 실례이며, 그 클래스의 속성과 방법을 계승한다.
PicoLisp는 내장된 개체 중심 확장을 제공합니다.대상을 대상으로 하는 세 가지 기준에 대해 공통된 공감대가 있는 것 같다.

  • 봉인: 코드와 데이터가 대상에 봉인되어 행위와 상태를 부여합니다.대상은 메시지를 보내고 받는 것을 통해 통신한다.

  • 상속: 대상이 분류된다.대상의 행위는 그 종류와 초류에서 계승된다.

  • 다태성: 서로 다른 종류의 대상이 같은 메시지에 대한 응답이 다를 수 있습니다.이를 위해, 클래스는 모든 메시지에 대해 다른 방법을 정의할 수 있다.
  • 모든 프로그래밍 사례와 마찬가지로 OOP는 어떤 상황에서는 유용하지만, 다른 상황에서는 스파게티 코드를 생성하는 것과 같다.우리는 여기서 이해득실을 토론하지 않는다.이제 이 상당히 추상적인 정의들이 실제 코드에 있는 모습을 주목해 봅시다.


    객체 및 클래스
    다음 정보 섹션은 PicoLisp64 OOP 자습서(PicoLisp64는 pil21의 전신)를 기반으로 합니다.불행하게도 pil21에는 이 강좌가 포함되지 않기 때문에 HTML과 예시 파일을 Gitlab 에 업로드했습니다.
    클래스는 class 함수로 정의됩니다.학급
  • 이름이 하나 있어요
  • 방법 정의와 초종류(es)
  • 클래스 변수(속성)가 있을 수 있습니다.
  • 오브젝트
  • 익명일 수도 있고external일 수도 있고
  • 에 클래스와 선택할 수 있는 방법이 정의되어 있다
  • 속성 목록에 속성이 있습니다.

  • 명명 규칙
    관례에 따르면 클래스 이름은 a+로 시작하고 클래스 방법은 a>로 끝난다.우리 몇 가지 예를 봅시다.

    간단한 기본 클래스
    PicoLisp64tutorial의 예시를 살펴보자. +Shape라는 간단한 기류와 두 개의 자류+Rectangle+Circle이다.+Shape 함수를 사용하여 클래스를 정의합니다class.
    (class +Shape)
    # x y
    
    관례에 따르면, 클래스 속성은 클래스 함수 다음에 주석으로 직접 추가해야 한다.PicoLisp는 동적 언어이기 때문에 하나의 클래스는 실행할 때 임의의 수량의 속성을 사용하여 확장할 수 있으며 고정된 대상의 크기나 구조보다 더 좋은 것은 없다.이 주석은 프로그래머가 이 종류의 본질과 전형적인 특징을 암시했다.+Shape에 대해 xy는 형상 원점의 좌표이다.
    이제 함수 dm ("define method") 를 사용하여 두 가지 방법 정의를 추가합니다.방법T부터 시작하겠습니다. 이것은 특수한 방법입니다. 새로운 대상을 만들 때마다 클래스 차원 구조에서 이 이름을 가진 방법을 찾을 때마다 이 방법을 실행합니다.
    (class +Shape)
    # x y
    
    (dm T (X Y)
       (=: x X)
       (=: y Y) )
    
    T는 다른 프로그래밍 언어에서'구조 함수'처럼 보이지만'초기값 설정항'이라고 부르는 것이 가장 좋다.T+Shape 방법은 두 개의 매개 변수XY를 받아들여 대상의 속성 목록에 저장한다.
    두 번째 방법move>은 객체의 원점에 오프셋 값DXDY을 추가하여 객체의 원점을 변경합니다.
    (dm move> (DX DY)
       (inc (:: x) DX)
       (inc (:: y) DY) )
    
    방법명칭 > 은 그것이 하나의 방법이라는 것을 나타낸다. (일반 함수와 상반된다.)

    사용This예시에서 우리는 새로운 변수This와 일부 새로운 함수를 주목할 것이다. :, :=::.이것들은 무엇을 대표합니까?
  • This: 우리가 대상을 처리할 때 우리는 항상 이런 상황을 만날 수 있다. 우리는 현재 대상을 인용하고 싶다.이런 상황에서 우리는 This 변수를 사용할 수 있다.
  • : 뒤에 보통 하나의 속성이 있는데'This에서 이 속성의 값을 얻는 것'으로 이해할 수 있다.
  • =:는 "This의 재산 저장에 대한 새로운 가치"라고 이해할 수 있다.
  • ::는'획득This의 속성 칸'으로 이해할 수 있다.
  • 다시 말하면 :: 단원격의 var를 얻는다.이것은 우리가 이전에 토론한 set function 개념과 같다.
    예를 들면 다음과 같습니다.
       (: x)
    
    속성 가져오기x.
       (=: x X)
    
    객체 특성x의 값을 X로 설정한 다음
       (inc (:: x) DX) 
    
    X의 값을 가져와 증가DX.

    하위 클래스와 상속
    이제 우리의 예로 돌아가자.하위 클래스 +Shape, 직사각형 클래스 +Rectangle 를 만듭니다.+Rectangle+Shape에서 계승되었다는 것을 밝히기 위해 우리는 후자를 class 함수에 추가한다.
    (class +Rectangle +Shape)
    # dx dy
    
    우리는 +Rectangle에 두 가지 새로운 속성이 있는 것을 보았다. dxdy.이 밖에 우리는 상속받은 xy재산도 있다.+Rectangle 계승Shape의 방법, 예를 들어move> 함수.그러나 우리는 증가하는 속성에 적응하기 위해 초기화 함수T를 조정해야 한다.우리는 super 함수를 호출하여 실현할 수 있다.
    (dm T (X Y DX DY)
       (super X Y)
       (=: dx DX)
       (=: dy DY) )
    
    이것은 초류가 이미 T 방법이 있음을 나타낸다. 이 방법은 XY 파라미터를 사용한다.
    마지막으로 우리area>에 대한 방법perimeter>, draw>+Rectangle을 정의합시다.
    (dm area> ()
       (* (: dx) (: dy)) )
    
    (dm perimeter> ()
       (* 2 (+ (: dx) (: dy))) )
    
    (dm draw> ()
       (drawRect (: x) (: y) (: dx) (: dy)) )
    

    두 번째 하위 클래스
    두 번째 하위 클래스+Circle를 만듭니다.그것은 또한 초류+Shape를 계승하고 반경의 부가 속성r을 가지고 있다.직사각형류처럼 area>draw> 방법, 그리고 perimeter>라는 새로운 방법을 정의합시다.
    (class +Circle +Shape)
    # r
    
    (dm T (X Y R)
       (super X Y)
       (=: r R) )
    
    (dm area> ()
       (*/ (: r) (: r) 31415927 10000000) )
    
    (dm perimeter> ()
       (*/ 2 (: r) 31415927 10000000) )
    
    (dm draw> ()
       (drawCircle (: x) (: y) (: r)) )
    
    31415927 당연 대표pi.왜 소수점이 없는지 모르겠고 함수*/를 모르면 Fixed Point Arithmetics에 대한 게시물에서 도움을 받을 수 있습니다.
    이제 우리는 클래스, 하위 클래스, 방법과 속성을 어떻게 정의하는지 알게 되었다.다음 글에서 우리는 그 중에서 대상을 어떻게 실례화하고 그것을 어떻게 사용하는지 보게 될 것이다.
    예시된 전체 코드 here 를 찾을 수 있습니다.

    출처

  • https://xkcd.com/1188/
    PicoLisp64

  • https://software-lab.de/doc/ref.html#oop
  • 표지 사진: 일본 승려Sengai가 그린 원형, 삼각형, 직사각형
  • 좋은 웹페이지 즐겨찾기