PicoLisp 탐색: 객체용 프로그래밍, 섹션 1
                                            
                                                
                                                
                                                
                                                
                                                
                                                 7711 단어  functionalooplisppicolisp
                    
비록 Edsger Dijkstra(나는 대상을 대상으로 프로그래밍하는 것이 나의 우아한 기준에 부합되는 구조화된 범례라고 생각하지 않는다)가 파멸적인 판단을 내렸지만, 우리는 OOP가 실제로 매우 유용한 몇 가지 상황을 발견할 수 있다. 물론!
PicoLisp의 객체 지향 개념을 살펴보겠습니다.
무엇이 대상을 대상으로 프로그래밍합니까?
Object-oriented programming는'대상'개념을 중심으로 하는 프로그래밍 모델로 데이터(일반적으로 속성)와 코드(일반적으로 방법이라고 부른다)를 포함할 수 있다.이러한 대상은 일부 클래스의 실례이며, 그 클래스의 속성과 방법을 계승한다.
PicoLisp는 내장된 개체 중심 확장을 제공합니다.대상을 대상으로 하는 세 가지 기준에 대해 공통된 공감대가 있는 것 같다.
봉인: 코드와 데이터가 대상에 봉인되어 행위와 상태를 부여합니다.대상은 메시지를 보내고 받는 것을 통해 통신한다.
상속: 대상이 분류된다.대상의 행위는 그 종류와 초류에서 계승된다.
다태성: 서로 다른 종류의 대상이 같은 메시지에 대한 응답이 다를 수 있습니다.이를 위해, 클래스는 모든 메시지에 대해 다른 방법을 정의할 수 있다.
 
 객체 및 클래스
다음 정보 섹션은 PicoLisp64 OOP 자습서(PicoLisp64는 pil21의 전신)를 기반으로 합니다.불행하게도 pil21에는 이 강좌가 포함되지 않기 때문에 HTML과 예시 파일을 Gitlab 에 업로드했습니다.
클래스는
class 함수로 정의됩니다.학급명명 규칙
관례에 따르면 클래스 이름은 a
+로 시작하고 클래스 방법은 a>로 끝난다.우리 몇 가지 예를 봅시다.간단한 기본 클래스
PicoLisp64tutorial의 예시를 살펴보자.
+Shape라는 간단한 기류와 두 개의 자류+Rectangle와 +Circle이다.+Shape 함수를 사용하여 클래스를 정의합니다class.(class +Shape)
# x y
+Shape에 대해 x와 y는 형상 원점의 좌표이다.이제 함수
dm ("define method") 를 사용하여 두 가지 방법 정의를 추가합니다.방법T부터 시작하겠습니다. 이것은 특수한 방법입니다. 새로운 대상을 만들 때마다 클래스 차원 구조에서 이 이름을 가진 방법을 찾을 때마다 이 방법을 실행합니다.(class +Shape)
# x y
(dm T (X Y)
   (=: x X)
   (=: y Y) )
T는 다른 프로그래밍 언어에서'구조 함수'처럼 보이지만'초기값 설정항'이라고 부르는 것이 가장 좋다.T의+Shape 방법은 두 개의 매개 변수X와 Y를 받아들여 대상의 속성 목록에 저장한다.두 번째 방법
move>은 객체의 원점에 오프셋 값DX과 DY을 추가하여 객체의 원점을 변경합니다.(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에 두 가지 새로운 속성이 있는 것을 보았다. dx과dy.이 밖에 우리는 상속받은 x과y재산도 있다.+Rectangle 계승Shape의 방법, 예를 들어move> 함수.그러나 우리는 증가하는 속성에 적응하기 위해 초기화 함수T를 조정해야 한다.우리는 super 함수를 호출하여 실현할 수 있다.(dm T (X Y DX DY)
   (super X Y)
   (=: dx DX)
   (=: dy DY) )
T 방법이 있음을 나타낸다. 이 방법은 X와 Y 파라미터를 사용한다.마지막으로 우리
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)) )
pi.왜 소수점이 없는지 모르겠고 함수*/를 모르면 Fixed Point Arithmetics에 대한 게시물에서 도움을 받을 수 있습니다.이제 우리는 클래스, 하위 클래스, 방법과 속성을 어떻게 정의하는지 알게 되었다.다음 글에서 우리는 그 중에서 대상을 어떻게 실례화하고 그것을 어떻게 사용하는지 보게 될 것이다.
예시된 전체 코드 here 를 찾을 수 있습니다.
출처
https://xkcd.com/1188/
PicoLisp64
https://software-lab.de/doc/ref.html#oop
Reference
이 문제에 관하여(PicoLisp 탐색: 객체용 프로그래밍, 섹션 1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/miatemma/picolisp-explored-object-oriented-programming-part-1-387f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)