객체 지향 JSL - 예?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />유럽 디스커버리 컨퍼런스에서 드류 포글리아(Drew Foglia)가 발표한 훌륭한 강연에 이어( 객체 지향 JSL – 유지/확장 가능한 JSL 코드 작성 기술 ), 첫 번째 객체 지향 JSL을 작성하려고 합니다.
ObjectClass.jsl(Drew가 제공한 핵심 예제 파일에서)을 사용하여 내가 만든 개체에 대한 속성을 가져오고 설정할 수 있습니다.
내 질문은 누구나 이 아이디어가 구현되는 방법을 보기 위해 공유할 수 있는 몇 가지 간단한 예가 있는지입니다. 예를 들어 다음 예제는 객체로 어떻게 보일 수 있습니까? 테이블 이름, 아니요. 열, 열 이름, 아니요. 각 테이블에 대한 행, 레이블 열 등)?
NamesDefaultToHere(1);
dt1 = Open("$SAMPLE_DATA/Cars.jmp");
dt2 = Open("$SAMPLE_DATA/자동차 1993.JMP");
//테이블 조인(일치하는 열 이름을 찾는 데 일부 함수가 사용되었다고 가정)
dt3 = 데이터 테이블( dt1 ) << 조인(
( 데이터 테이블( dt2 ) ) 으로,
같은 이름 열 병합,
열 일치( Column(dt1,1) = Column(dt2,1), Column(dt1,2) = Column(dt2,2) ),
배수( 0, 0 ) 삭제,
일치하지 않는 항목 포함( 0, 0 ),
기본 테이블 순서 유지( 1 )
);
//결과 표시
win1 = dt3 << 그래프 빌더(
크기( 534, 447 ),
제어판 표시( 0 ),
변수( X( :크기 ), Y( :이름( "휠 베이스(인치)" ) ) ),
요소( 점( X, Y, 범례( 38 ) ), 박스 플롯( X, Y, 범례( 39 ) ) )
);
//치우다
win1 << On Close(dt1 <<창 닫기;dt2 <<창 닫기; dt3 << 창 닫기(저장하지 않음) );
언제 새 클래스를 만들기로 결정합니까? 일반 ObjectClass는 내가 어떤 속성을 어떤 키에 할당했는지 기억할 수만 있다면 테이블에 대해 잘 작동할 것입니다!
감사해요,
스티븐
Re: 객체 지향 JSL - 예?드로포글리아
우선, 나는 당신이 이것에 넣은 세부 사항을 좋아합니다.내가 악마의 옹호자 역할을 해도 괜찮다면 함수가 네임스페이스를 반환할 때 최상위 네임스페이스를 만드는 이유는 무엇입니까?네임스페이스는 쌓이지 않으며 예제 중 하나를 제외한 모든 경우 해당 네임스페이스의 유일한 함수는 인스턴스화 함수입니다.클래스는 이름으로 인스턴스 가능해야 하고 ObjectClass:newObject() 대신 모든 것이 그 안에 있어야 한다고 생각합니다.당신의 사고 과정이 궁금합니다.
나는 잠시 동안 객체 지향 항목을 조롱했지만 "this=namespace(expr(ns<
감사해요,
빈스
Re: 객체 지향 JSL - 예?스티븐.피어슨
알아요 드로포글리아 귀하의 질문에 이미 답변했지만 답변을 작성하는 중이었기 때문에 그 가치에 대해 설명하겠습니다.
첫째, 제 생각에는 데이터 테이블 자체가 이미 개체로 간주될 수 있습니다.
dt1 = NewTable() - Datatable의 새 "인스턴스"를 만듭니다.
ShowProperties(dt1) - Datatable 개체 dt1에 대한 모든 "속성" 및 "메소드"를 표시합니다.
Drew의 답변에서와 같이 추가 속성 및 메서드를 사용하여 기존 데이터 테이블 개체를 "확장"하는 것에 대해 생각할 수 있습니다. 다음과 같은 추가 기능에 대해 생각했습니다.
1. 행 상태 처리기.
2. 열 및 행, 추가/삭제 감지.
3. 테이블 셀 변경 내역.
4. 데이터박스(디스플레이박스)
따라서 DatatableObject에 대한 가능한 "생성자"는 멤버 변수 및 함수가 선언된 위치와 같을 수 있습니다. (Expr( New Namespace() ) 참고.
이러한 방식으로 개체를 선언하는 아이디어는 복제 가능한 엔터티를 설정할 뿐만 아니라 완전히 정의된 후에 사용할 수 있는 함수 및 식 이름을 명확하게 볼 수 있도록 합니다.

NewDatatableObject의 내 버전(일부 목록). 멤버 함수가 실제로 정의되는 곳은 다음과 같습니다.


예를 들어 DatatableObject의 별도 인스턴스 2개를 만듭니다.

이제 이러한 테이블에는 "확장" 속성이 내장되어 있습니다. 이 예에서는 행 선택 및 열/행 삭제 감지와 같은 일부 테이블 작업이 추적됩니다.


이 방법을 사용하여 구현할 수 있는 다른 유용한 기능도 많이 상상할 수 있습니다.
Re: 객체 지향 JSL - 예?안녕, 필립
매우 미묘합니다. DataTableClass 정의의 30행을 보면 다음과 같이 표시됩니다.

super는 로컬 변수(함수의 수명 주기 범위)로 정의되고 이미 존재하는 deleteChildReferences 함수의 DEFINITION에 할당됩니다.
다시 읽어보세요.
다른 방식으로 말해 보겠습니다. 네임스페이스(6행에서 ObjectClass:newObject() 호출이 실행될 때 포함되고 할당되는 ObjectClass.jsl에 정의됨)에는 이미 deleteChildReferences라는 함수가 있습니다. DataTableClass에서 29행은 해당 할당을 대체합니다. 그러나 재할당 과정에서 원래 함수 정의(ObjectClass에서 선언된 정의)에 대한 참조를 보유하는 로컬 변수 "super"를 생성합니다. 이러한 방식으로 해당 함수의 동작을 재정의하고 이 경우 테이블 참조를 닫는 코드를 추가한 다음 여전히 super() 호출을 사용하여 원래 함수 선언을 호출할 수 있습니다.
Re: 객체 지향 JSL - 예?드로포글리아 ,
정말 도움이 되었습니다. 감사합니다. 내 현재 프로젝트에는 비선형 상호 작용이 있으므로 이 접근 방식을 사용하면 사용자로부터 수집하는 메타 데이터를 더 쉽게 처리할 수 있을 것입니다.
Re: 객체 지향 JSL - 예?드로포글리아
놓쳤다면 용서해주세요. "super()"는 어디에 있습니까? 한정된?
Re: 객체 지향 JSL - 예?스티븐.피어슨 ,
응답하는 데 시간이 오래 걸리는 점 사과드립니다. 귀하가 제공한 예에 대해 "클래스" 정의 및 그 용도의 예를 제공하겠습니다. 이것을 원하는지/필요한지 고려하는 것이 중요합니다. 당신이 지적했듯이 "언제 새로운 클래스를 만들기로 결정하겠습니까?" 제 프레젠테이션에서 기억하실 수 있듯이 저는 OO 구조가 최선의 접근 방식인지 결정하기 전에 프로젝트 규모, 공동 개발, 수명, 재사용 필요성 등을 고려해야 한다고 제안했습니다. 나는 응답할 것이다 엠샤프 해당 주제에 대한 자세한 내용이 포함된 님의 댓글입니다.
귀하의 예로 돌아가십시오. 필수는 아니지만 ObjectClass를 상위 클래스로 사용하여 DataTableClass를 만들 수 있습니다.

DataTableClass 인스턴스의 필드 사용법은 다음과 같습니다.

이러한 간단한 예의 경우 OO 구문을 사용할 이유가 없습니다. 그러나 테이블 모음을 관리하려는 경우를 고려하고 사용자와 외부 시스템이 주석 및 기타 속성을 추가하고 이러한 모음을 전달하고 지정된 이벤트를 처리 및 응답하고 향후 확장 및 확장을 계획하고 다른 사람들이 이러한 테이블 등을 쉽게 사용할 수 있는 "계약"입니다. 그런 다음 이와 같은 OO 구성을 사용하는 것은 매우 유익합니다.
Re: 객체 지향 JSL - 예?오해하지 마세요.OOP는 뛰어난 코드를 생성하는 훌륭한 방법론이지만 FP는 동일합니다.숙련된 프로그래머라면 FP 방식으로 필요한 코드 품질을 생산할 수 있을 것입니다. pseudo-OOP를 읽는 것은 해야 하는 것보다 할 수 있는지에 대한 연습입니다.당신이 OOP만 아는 중급 프로그래머여서 친숙한 방식으로 코딩하고 싶다면 FP를 배우는 것이 당신이 성장하고, 다르게 생각하고, 많은 언어에서 더 나은 프로그래밍을 하는 데 도움이 될 것이기 때문에 추천합니다.당신이 FP만 아는 중급 프로그래머이고 당신의 지평을 넓히기 위해 OOP를 배우고 싶다면 실제로 언어 내에서 구현된 클래스와 객체가 있는 다른 언어를 배우는 것부터 시작하는 것이 좋습니다.당신이 정말 아무것도 모르는 초보 프로그래머이고 방금 OOP가 멋지다고 들었다면 제 충고를 받아들이고 지금은 잊어버리세요.특히 대부분 JSL로 스크립팅할 예정이라면 더욱 그렇습니다.
개인적으로 저는 JMP가 클래스와 객체를 구현하여 진정한 OOP가 실현될 때까지 기다릴 것입니다.그들의 레이더에 있는지는 확실하지 않지만 일어날 것이라고 확신합니다. 즉, 이제 JavaScript에 클래스와 개체가 있습니다.미래가 무엇을 가져올지 결코 알 수 없습니다.
Re: 객체 지향 JSL - 예?스티븐.피어슨 ,
이 주제에 관심이 있는 다른 사람을 만나서 정말 기쁩니다. 엠샤프 JSL은 OOP 언어가 아니라는 말이 맞습니다. 그러나 최근 JSL에서 "pseudo-OOP" 구성을 실현할 수 있었습니다. 제 작업을 여러분과 공유하게 되어 기쁩니다. 당신이 제기한 질문에 대한 적절한 답변을 만들 수 있는지 확인하겠습니다... 대기
필
Re: 객체 지향 JSL - 예?내 2센트만: 그 강연에서 배운 모든 것을 잊어버리세요.
JSL은 객체 지향 언어가 아닙니다.OOP는 데이터 구조가 내장되어 있지 않은 언어에 적합하지만 유일한 프로그래밍 방법은 아닙니다.그러나 Java, C++, C# 배경에서 온 대부분의 프로그래머는 OOP가 아닌 방식으로 프로그래밍하는 데 머리를 감을 수 없습니다.JMP에서 데이터 구조는 데이터 테이블에 남겨두는 것이 가장 좋습니다.여기에는 이점과 단점이 있습니다.제 생각에는 JSL 데이터 테이블에서 프랑켄슈타인 개체를 함께 해시할 수 있지만 모든 단점과 이점이 없습니다.
무슨 JSL 나 에스 잘하는 것은 함수형 프로그래밍입니다.JSL은 함수 AND 표현식을 지원합니다.함수형 프로그래밍을 사용하여 필요한 모든 작업을 깔끔하게 수행할 수 있습니다.두 가지 프로그래밍 방법을 비교하는 몇 가지 장단점에 대해서는 이 기사를 확인하십시오. 코드뉴비