KR20050039547A - 컴퓨터 플랫폼에 대한 프로그래밍 인터페이스 - Google Patents

컴퓨터 플랫폼에 대한 프로그래밍 인터페이스 Download PDF

Info

Publication number
KR20050039547A
KR20050039547A KR1020040072563A KR20040072563A KR20050039547A KR 20050039547 A KR20050039547 A KR 20050039547A KR 1020040072563 A KR1020040072563 A KR 1020040072563A KR 20040072563 A KR20040072563 A KR 20040072563A KR 20050039547 A KR20050039547 A KR 20050039547A
Authority
KR
South Korea
Prior art keywords
functions
user interface
function
allow
desktop
Prior art date
Application number
KR1020040072563A
Other languages
English (en)
Other versions
KR101076904B1 (ko
Inventor
구작크리스제이.
카라탈커렘비.
밀러마크엠.
쉘던마이클지.
맥키티모씨피.
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20050039547A publication Critical patent/KR20050039547A/ko
Application granted granted Critical
Publication of KR101076904B1 publication Critical patent/KR101076904B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/10Requirements analysis; Specification techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • User Interface Of Digital Computer (AREA)
  • Stored Programmes (AREA)
  • Input From Keyboards Or The Like (AREA)

Abstract

컴퓨터 플랫폼에 대한 프로그래밍 인터페이스는 다양한 기능을 포함할 수 있다. 일부 실시예들에서, 프로그래밍 인터페이스는 재사용가능한 사용자 인터페이스 컨트롤에 관련된 제1 서비스 그룹, 사용자 인터페이스 다이얼로그 및 사용자 인터페이스 마법사에 관련된 제2 서비스 그룹, 사용자 인터페이스 기능을 확장하는 것에 관련된 제3 서비스 그룹, 및 사용자 인터페이스의 데스크 탑의 기능을 확장하는 것에 관련된 제4 서비스 그룹 중 하나 이상을 포함한다.

Description

컴퓨터 플랫폼에 대한 프로그래밍 인터페이스{PROGRAMMING INTERFACE FOR A COMPUTER PLATFORM}
본 발명은 소프트웨어 및 그러한 소프트웨어의 개발에 관한 것이다. 특히, 본 발명은 어플리케이션 프로그램 및 컴퓨터 하드웨어에 의한 소프트웨어 플랫폼의 이용을 용이하게 하는 프로그래밍 인터페이스에 관한 것이다.
첨부된 컴팩트 디스크의 간단한 설명
본 명세서와 함께 첨부된 것은 마이크로소프트 윈도우즈 코드-명명된 "롱혼(Longhorn)" 오퍼레이팅 시스템에 대한 소프트웨어 개발 키트(SDK)를 저장하는 3개의 컴팩트 디스크 세트이다. SDK는 마이크로소프트 윈도우즈 코드-명명된 "Longhorn"오퍼레이팅 시스템에 대한 문서(documentation)를 포함한다. 이들 3개의 컴팩트 디스크들 각각의 이중 복사본이 본 명세서와 첨부된다.
3개의 컴팩트 디스크 세트 내의 제1 컴팩트 디스크(3개 중 CD 1)는 2003년 10월 22에 생성된 "lhsdk"라 명명된 파일 폴더를 포함한다. 이것은 크기가 586Mbyte의 크기이고, 9,692개의 서브-폴더를 포함하며, 44,292개의 서브 파일들을 포함한다. 3개의 컴팩트 디스크 세트 중 2번째 컴팩트 디스크(3개중 CD 2)는 3003년 10월 22일에 생성된 "ns"라 명명된 파일 폴더를 포함한다. 이것은 크기가 605Mbyte의 크기이고, 12,628개의 서브 폴더를 포함하며, 44,934개의 서브 파일을 포함한다. 3개의 컴팩트 디스크 세트에서 제3 컴팩트 디스크(3개중 CD 3)는 2003년 10월 22일에 생성된 "ns"라 명명된 폴더를 포함한다. 이것은 크기가 575Mbyte의 크기이고, 9,881개의 서브 폴더를 포함하며, 43,630개의 서브 파일을 포함한다. 이들 3개의 컴팩트 디스크들 각각의 파일들은 윈도우즈-브랜드 오퍼레이팅 시스템(예를들면, 윈도우즈 NT, 윈도우즈 98, 윈도우즈 2000, 윈도우즈 XP, 등)을 실행하는 윈오두즈-기반 컴퓨팅 디바이스(예를 들면, IBM-PC 또는 그 등가물) 상에서 실행될 수 있다. 3개의 컴팩트 디스크 세트내의 각 컴팩트 디스크 상의 파일들이 여기에 참조로 통합되어 있다.
3개의 컴팩트 디스크 세트의 각 컴팩트 디스크 자체는 CD-R이고, ISO 9660 표준에 일치한다. 3개의 컴팩트 디스크 세트의 각 컴팩트 디스크의 내용은 정보 교환에 대한 미국 표준 코드(ASCII)와 부합한다.
매우 오래 전부터, 컴퓨터 소프트웨어는 "오퍼레이팅 시스템" 소프트웨어 또는 "어플리케이션" 소프트웨어로서 분류되었다. 넓게 말하자면, 어플리케이션은 수학 등식을 풀거나 워드 프로세싱을 지원하는 것과 같이 컴퓨터 사용자를 위해 특정 태스크를 수행하는 소프트웨어 수단이다. 오퍼레이팅 시스템은 컴퓨터 하드웨어를 관리하고 제어하는 소프트웨어이다. 오퍼레이팅 시스템의 목적은 컴퓨터 리소스를 어플리케이션 프로그래머에게 가용하게 하고, 동시에 하드웨어를 실제로 제어하는데 필요한 복잡성을 숨기는 것이다.
오퍼레이팅 시스템은 어플리케이션 프로그램 인터페이스 또는 API라고 집합적으로 알려진 함수들을 통해 리소스들을 가용하게 한다. 용어 API는 이들 함수들 중 오직 하나를 참조하는데 이용된다. 함수들은 이들이 어플리케이션 프로그래머에게 어떤 리소스 또는 서비스를 제공하느냐의 측면으로 그룹화된다. 어플리케이션 소프트웨어는 개별적인 API 함수를 호출함으로써 리소스를 요구한다. API 함수들은 오퍼레이팅 시스템에 의해 제공되는 메시지 및 정보를 어플리케이션 소프트웨어에 다시 중계하는 수단으로서 기능한다.
하드웨어의 변화뿐만 아니라, 오퍼레이팅 시스템 소프트웨어의 발달을 견인하는 또 다른 인자는 어플리케이션 소프트웨어 개발을 단순화시키고 가속시키고자 하는 욕구였다. 어플리케이션 소프트웨어 개발은 기를 꺽는 작업이고, 종종 수백만 라인의 코드를 가지는 정교한 프로그램을 생성하는데 수 년의 개발 기간이 요구될 수 있다. 다양한 버전의 마이크로소프트 윈도우즈 오퍼레이팅 시스템과 같은 인기있는 오퍼레이팅 시스템에 대해, 어플리케이션 소프트웨어 개발자는 오퍼레이팅 시스템을 활용하는 수 천개의 다른 어플리케이션을 매년 저작한다. 그렇게 많은 다양한 어플리케이션 개발자들을 지원하는데 일관되고 사용가능한 오퍼레이팅 시스템 베이스가 요구된다.
종종, 어플리케이션 소프트웨어의 개발은 오퍼레이팅 시스템을 더 복잡하게 만듦으로써 더 간단하게 될 수 있다. 즉, 하나의 함수가 수 개의 다른 어플리케이션 프로그램에 유용한 경우, 수십 명의 소프트웨어 개발자들이 수십 개의 다른 어플리케이션에 포함시키기 위해 수십 번 저작할 필요가 있는 것보다는 오퍼레이팅 시스템에 포함시키기 위해 한 번 저작하는 것이 더 낫다. 이와 같이, 오퍼레이팅 시스템이 다수의 어플리케이션에 의해 요구되는 넓은 범위의 공통 기능을 지원한다면, 어플리케이션 소프트웨어 개발 비용 및 시간에 있어서 상당한 절감이 달성될 수 있다.
오퍼레이팅 시스템과 어플리케이션 소프트웨어간의 구분이 어디에 그려져 있는지에 관계없이, 분명한 것은, 유용한 오퍼레이팅 시스템에 있어서, 오퍼레이팅 시스템과 컴퓨터 하드웨어 및 어플리케이션 소프트웨어간의 API는 오퍼레이팅 시스템 자체의 효율적인 내부 동작만큼이나 중요하다.
과거 수년에 걸쳐, 인터넷의 범용 선택 및 일반화된 네트워킹 기술은 컴퓨터 소프트웨어 개발자의 전망을 변경시켰다. 전통적으로, 소프트웨어 개발자들은 단독 데스크탑 컴퓨터에 대한 단일-지역 소프트웨어 어플리케이션, 또는 로컬 영역 네트워크(LAN)를 통해 제한된 개수의 다른 컴퓨터에 접속된 LAN-기반 컴퓨터에 초점을 맞추었다. 그러한 소프트웨어 어플리케이션은 소프트웨어가 축소-포장된(shrink wrapped) 패키지로 시장에 나와 판매되었으므로, "축소-포장된"제품으로서 통상 지칭되었다. 어플리케이션은 컴퓨터의 기저 오퍼레이팅 시스템에 액세스하기 위해 잘-정의된 API를 활용했다.
인터넷이 발달하고 광범위하게 용인됨에 따라, 산업은 월드 와이드 웹(또는 단순히 "웹")상의 다양한 사이트에서의 호스팅 어플리케이션의 힘을 인식하게 되었다. 네트워킹된 세계에서, 임의의 장소로부터의 클라이언트들은 다양한 위치에 호스팅된 서버-기반 어플리케이션에 요구를 제출하여 몇 분의 1초에 응답을 수신한다. 그러나, 이들 웹 어플리케이션들은 단독 컴퓨팅 머신 또는 로컬로 네트워킹된 컴퓨터에 대해 원래 개발되었던 동일한 오퍼레이팅 시스템 플랫폼을 이용하여 통상 개발되었다. 불행하게도, 일부 예들에서, 이들 어플리케이션은 분산 컴퓨팅 체제에 적절하게 전달되지 않는다. 기저 플랫폼은 제한없는 개수의 상호접속된 컴퓨터를 지원하려는 생각으로 구축되지 않았다.
인터넷에 의해 밀려들어오는 분산 컴퓨팅 환경으로의 시프트를 수용하기 위해, 마이크로소프트사는 ".NET" 프레임워크("닷넷"으로 읽혀짐)로 알려진 네트워크 소프트웨어 플랫폼을 개발했다. 마이크로소프트사의 .NET은 사람, 정보, 시스템 및 디바이스들을 접속시키기 위한 소프트웨어이다. 플랫폼은 개발자들이 인터넷을 통해 실행할 웹 서비스를 생성할 수 있게 한다. 이러한 다이내믹한 시프트는 마이크로소프트의 .NET 프레임워크에 대한 API 함수 세트에도 동반되었다.
.NET 프레임워크의 이용이 점점 통상적으로 됨에 따라, 플랫폼의 효율 및/또는 성능을 증가시키는 방법들이 식별되었다. 발명자들은 그러한 증가된 효율 및/또는 성능을 허용하는 프로그래밍 인터페이스 함수의 고유 세트를 개발했다.
컴퓨터 플랫폼에 대한 프로그래밍 인터페이스가 기재된다.
특정 양태에 따르면, 프로그래밍 인터페이스는 이하의 서비스 그룹, 즉 재사용가능한 사용자 인터페이스 컨트롤에 관련된 제1 서비스 그룹, 사용자 인터페이스 다이얼로그 및 사용자 인터페이스 마법사(wizard)에 관련된 제2 서비스 그룹, 사용자 인터페이스 기능을 확장하는 것과 관련된 제3 서비스 그룹, 및 사용자 인터페이스의 데스크탑의 기능을 확장하는 것과 관련된 제4 서비스 그룹 중에서 하나 이상을 포함할 수 있다.
동일한 참조부호는 도면 전체에 걸쳐 유사한 특징을 참조하는데 이용된다.
본 명세서는 개발자들이 웹 어플리케이션 및 서비스를 구축할 수 있는 네트워크 플랫폼에 대한, 어플리케이션 프로그램 인터페이스(API)와 같은 프로그래밍 인터페이스를 설명한다. 특히, 마이크로소프트사에 의해 생성되는 .NET 프레임워크와 같은 네트워크 플랫폼을 이용하는 오퍼레이팅 시스템에 대한 API의 예가 설명된다. .NET 프레임워크는 분산 컴퓨팅 환경에서 구현되는 웹 서비스 및 웹 어플리케이션에 대한 소프트웨어 플랫폼이다. 이것은 특정 태스크를 수행하기 위해 협업하는 느슨하게 결합된 웹 서비스들 사이에서 통신하는 개방형 통신 표준을 이용하는, 차세대 인터넷 컴퓨팅을 나타낸다.
기재된 구현에서, 네트워크 플랫폼은 XML(확장가능한 마크업 언어), 데이터를 기술하기 위한 개방형 표준을 활용한다. XML은 월드 와이드 웹 컨소시엄(W3C)에 의해 관리된다. XML은 웹 페이지 상의 데이터 요소 및 기업-대-기업 문서를 정의하는데 이용된다. XML은 HTML과 동일한 태그 구조를 이용하지만, HTML은 요소들이 표시되는 방법을 정의하는데 대해, XML은 이들 요소들이 무엇을 포함하고 있는지를 정의한다. HTML은 소정의 태그를 이용하지만, XML은 그 페이지의 개발자에 의해 태그들이 정의될 수 있도록 허용한다. 그러므로, 가상적으로 임의의 데이터 아이템이 식별될 수 있어, 웹 페이지들이 데이터베이스 기록처럼 기능할 수 있게 한다. 단순 오브젝트 액세스 프로토콜(SOAP)과 같은 XML 및 다른 개방형 프로토콜의 이용을 통해, 네트워크 플랫폼은 사용자의 요구에 맞출 수 있는 광범위한 서비스의 통합을 허용한다. 본 명세서에 기재된 실시예들이 XML 및 다른 개방형 표준과 조합하여 기재되어 있지만, 그러한 것은 본 청구된 발명의 동작을 위해 꼭 필요한 것은 아니다. 다른 동일하게 유효한 기술이 본 명세서에 기재된 발명을 구현하는데 충분하다.
본 명세서에 이용되는 바와 같이, 어플리케이션 프로그램 인터페이스 또는 API라는 구절은 원격 호출(call)(예를 들면, 프록시, 스터브(stub) 관계) 및 SOAP/XML 호출(invocation)뿐만 아니라 메소드 또는 함수 호출을 채용하는 전통적인 인터페이스들도 포함한다.
네트워크 환경의 예
도 1은 .NET 프레임워크와 같은 네트워크 플랫폼이 구현되는 네트워크 환경(100)을 도시하고 있다. 네트워크 환경(100)은 네트워크(104, 예를 들면 인터넷)를 통해 액세스될 수 있는 서비스를 제공하는 대표적인 웹 서비스(102(1), ..., 102(N))를 포함한다. 참조부호 102로 명명된 웹 서비스들은 원격 절차 호출(RPC) 또는 오브젝트 브로커 타입 기술과 같이 네트워크를 통해 웹 서비스와 상호작용하는 다른 수단들이 이용될 수도 있지만, 통상 XML, SOAP, WAP(무선 어플리케이션 프로토콜), HTTP(하이퍼텍스트 트랜스포트 프로토콜) 및 SMTP(단순 메일 전달 프로토콜)와 같은 산업 표준 웹 프로토콜에 의해 네트워크(104)를 통해 프로그램적으로 상호작용하고 재사용가능한 프로그램가능한 어플리케이션 컴포넌트이다. 웹 서비스는 자발-기술(self-describing)이 가능하고 종종 메시지의 포맷 및 순서화의 측면에서 정의된다.
웹 서비스(102)는 다른 서비스(통신 링크(106)에 의해 표현됨) 또는 웹 어플리케이션(110, 통신 링크(112 및 114)에 의해 표현됨)과 같은 소프트웨어 어플리케이션에 의해 바로 액세스할 수 있다. 각 웹 서비스(102)는 특정 서비스에 대한 요구를 핸들링하는 소프트웨어를 실행하는 하나 이상의 서버를 포함하는 것으로서 예시된다. 그러한 서비스들은 요구자에게 다시 지원되는 정보를 저장하는 데이터베이스를 유지한다. 웹 서비스들은 다양한 다른 서비스들 중에서 임의의 하나를 수행하도록 구성될 수 있다. 웹 서비스들의 예는 로그인 인증, 통지, 데이터베이스 저장, 주식 시세, 위치 디렉토리, 매핑, 음악, 전자 지갑, 달력/스케줄러, 전화 번호 리스트, 뉴스 및 정보, 게임, 티켓팅, 등을 포함한다. 웹 서비스들은 서로 및 다른 어플리케이션과 조합되어 지능형 인터액티브 체험을 구축할 수 있다.
네트워크 환경(100)은 또한 웹 서비스(102, 통신 링크(122)에 의해 표현됨) 및/또는 웹 어플리케이션(110, 통신 링크(124, 126 및 128)에 의해 표현됨)을 활용하는 대표적인 클라이언트 디바이스(120(1), 120(2), 120(3), ..., 120(M))를 포함한다. 클라이언트는 클라이언트(120(3) 및 120(4)) 간의 예로 든 XML 링크(130)에 의해 나타낸 바와 같이, 표준 프로토콜을 이용하여 서로 통신할 수 있다.
참조번호 120으로 지칭된 클라이언트 디바이스는 다수의 다른 방식으로 구현될 수 있다. 가능한 클라이언트 구현의 예들은 휴대용 컴퓨터, 고정형 컴퓨터, 태블렛 PC, 텔레비전/셋탑 박스, 무선 통신 디바이스, 개인 휴대 단말기, 게임 콘솔, 프린터, 사진복사기 및 다른 스마트 디바이스를 포함하고, 이들로 제한되지 않는다.
웹 어플리케이션(110)은 네트워크 플랫폼 상에서 운용되도록 설계된 어플리케이션으로서, 클라이언트(120)로부터의 요구를 핸들링하고 서비스할 때 웹 서비스(102)를 활용한다. 웹 어플리케이션(110)은 하나 이상의 서버(134) 또는 다른 컴퓨터 시스템들 상에서 실행되고 있고, 프로그래밍 프레임워크(132)의 위에서 운용되고 있는 하나 이상의 소프트웨어 어플리케이션(130)으로 구성된다. 유의할 점은, 웹 어플리케이션(110)의 일부가 실제로 하나 이상의 클라이언트(120) 상에 상주할 수 있다는 점이다. 다르게는, 웹 어플리케이션(110)은 클라이언트(120) 상의 다른 소프트웨어와 조정하여 그 태스크를 실질적으로 달성한다.
프로그래밍 프레임워크(132)는 어플리케이션 개발자들에 의해 개발된 어플리케이션 및 서비스를 지원하는 구조이다. 이것은 복수의 언어를 지원함으로써 복수어 개발 및 무결절성 통합을 허용한다. 이것은 또한 SOAP와 같은 개방형 프로토콜을 지원하고, 기저 오퍼레이팅 시스템 및 오브젝트 모델 서비스를 인캡슐레이션한다. 프레임워크는 복수의 프로그래밍 언어에 대한 강력하고 안전한 실행 환경을 제공하고, 안전하고 통합된 클래스 라이브러리를 제공한다.
프레임워크(132)는 어플리케이션 프로그램 인터페이스(API) 레이어(142), 공통 언어 런타임(CLR) 레이어(144) 및 오퍼레이팅 시스템/서비스 레이어(146)를 포함하는 다중-레이어 아키텍쳐이다. 이러한 레이어형 아키텍쳐는 프레임워크의 다른 부분에 영향을 미치지 않고 다양한 레이어에 대한 업데이트 및 변형을 가능하게 한다. 공통 언어 스펙(CLS, 140)은 다양한 언어의 설계자가 기저 라이브러리 기능을 액세스할 수 있는 코드를 저작할 수 있게 한다. 스펙(140)은 언어 상호동작성을 촉진시키는데 이용될 수 있는 언어 설계자와 라이브러리 설계자간의 계약으로서 기능한다. CLS에 충실함으로써, 하나의 언어로 저작된 라이브러리가 다른 언어로 저작된 코드 모듈에 바로 액세스할 수 있으므로, 하나의 언어로 저작된 코드 모듈과 다른 언어로 저작된 코드 모듈간의 무결절성 통합을 달성한다. CLS의 세부 구현예는 ECMA TC39/TG3의 참여자에 의해 생성된 ECMA 표준에 기술되어 있다. 독자는 ECMA 웹 사이트 www.ecma.ch를 참조하면 된다.
API 레이어(142)는 어플리케이션(130)이 레이어(146)에 의해 제공되는 리소스 및 서비스에 액세스하기 위해 호출할 수 있는 함수 그룹을 제공한다. 네트워크 플랫폼에 대해 API 함수를 노출시킴으로써, 어플리케이션 개발자는 이들 네트워크 리소스들이 실제로 동작하는 방법 또는 가용하게 되는 방법의 복잡한 상호작용을 이해할 필요없이, 네트워크 리소스 및 다른 웹 서비스를 완전하게 이용하는 분산된 컴퓨팅 시스템에 대한 웹 어플리케이션을 생성할 수 있다. 더구나, 웹 어플리케이션은 임의의 개수의 프로그래밍 언어로 저작될 수 있고, 공통 언어 런타임(144)에 의해 지원되고 공통 언어 스펙(140)의 일부로서 포함되는 중간 언어로 번역될 수 있다. 이와 같이, API 레이어(142)는 폭넓고 다양한 어플리케이션에 대한 방법을 제공할 수 있다.
추가적으로, 프레임워크(132)는 프레임워크를 호스팅하는 서버(134)로부터 원격으로 실행하는 원격 어플리케이션에 의해 놓여지는 API 호출을 지원하도록 구성될 수 있다. 클라이언트(120(3), 120(4)) 상에 상주하는 대표적인 어플리케이션(148(1), 148(2)) 각각은 네트워크(104)를 통해 API 레이어(142)에 직접 또는 간접적으로 호출함으로써 API 함수를 이용할 수 있다.
프레임워크는 또한 클라이언트에서 구현될 수 있다. 클라이언트(120(3))는 프레임워크(150)가 클라이언트에서 구현되는 상황을 나타낸다. 이러한 프레임워크는 서버-기반 프레임워크(132)와 동이하고, 클라이언트를 위해 변형될 수 있다. 다르게는, 클라이언트 기반 프레임워크는 클라이언트가 셀룰러 전화기, 개인 휴대 단말기, 핸드헬드 컴퓨터 또는 다른 통신/컴퓨팅 디바이스와 같이 제한되거나 전용 함수 디바이스인 경우에 집중될 수 있다.
개발자의 프로그래밍 프레임워크
도 2는 프로그래밍 프레임워크(132)를 더 상세하게 도시하고 있다. 공통 언어 스펙(CLS) 레이어(140)는 다양한 언어(130(1), 130(2), 130(3), 130(4), ..., 130(K))로 저작된 어플리케이션을 지원한다. 그러한 어플리케이션 언어는 비주얼 베이직, C++, C#, 코볼, Jscript, Perl, Eiffel, Python, 등을 포함한다. 공통 언어 스펙(140)은 뒤따르는 경우에 다양한 언어들이 통신될 수 있도록 하는 특징 서브세트 또는 특징에 관한 규칙들을 지정한다. 예를 들면, 일부 언어들은 그렇지 않으면 공통 언어 런타임(144)에 의해 지원될 수 있는 주어진 타입(예를 들면 "int*"타입)을 지원하지 않는다. 이 경우에, 공통 언어 스펙(140)은 상기 타입을 포함하지 않는다. 반면에, 모든 또는 대부분의 언어에 의해 지원되는 타입(예를 들면, "int[]"타입)은 공통 언어 스펙(140)에 포함되어, 라이브러리 개발자들이 이를 자유롭게 이용하고 언어가 이를 핸들링할 수 있도록 보장된다. 이러한 통신 능력은 하나의 언어로 저작된 코드 모듈과 다른 언어로 저작된 코드 모듈간의 무결절성 통합으로 나타나게 된다. 다른 언어들이 특정 태스크에 특히 잘 어울리므로, 언어들간의 무결절성 통합은 개발자들이 다른 언어로 저작된 모듈로 그 코드 모듈을 이용하는 능력으로 특정 코드 모듈에 대한 특정 언어를 선택할 수 있게 한다. 공통 언어 런타임(144)은 교차 언어 계승(inheritance)으로 무결정성의 복수어 개발을 허용하고, 복수의 프로그래밍 언어에 대한 강력하고 안전한 실행 환경을 제공한다. 공통 언어 스펙(140) 및 공통 언어 런타임(144)에 대한 더 많은 정보에 대해서는, 2000년 6월 21일에 출원된 "Method and System for Compiling Multiple Languages"(출원번호 09/598,105) 및 2000년 7월 10일에 출원된 "Unified Data Type System and Method"(출원번호 09/613,289)를 참조하고, 이는 참고로 첨부되었다.
프레임워크(132)는 오퍼레이팅 시스템(146(1), 예를 들면, 윈도우즈-브랜드 오퍼레이팅 시스템) 및 오브젝트 모델 서비스(146(2), 예를 들면, 컴포넌트 오브젝트 모델(COM) 또는 분산된 COM)를 인캡슐레이션한다. 오퍼레이팅 시스템(146(1))은 파일 관리, 통지, 이벤트 핸들링, 사용자 인터페이스(예를 들면, 윈도 기능, 메뉴, 다이얼로그, 등), 보안, 인증, 증명, 프로세스 및 스레드, 메모리 관리 등과 같은 종래의 기능들을 제공한다. 오브젝트 모델 서비스(146(2))는 다른 오브젝트들과의 인터페이싱을 제공하여 다양한 태스크들을 수행한다. API 레이어(142)에 수행된 호출이 오퍼레이팅 시스템(146(1)) 및/또는 오브젝트 모델 서비스(146(2))에 의한 로컬 실행을 위해 공통 언어 런타임 레이어(144)에 넘겨진다.
API(142)는 API 함수들을 복수의 명칭 공간으로 그룹화한다. 명칭 공간은 관련된 기능의 특정 세트를 제공하는, 집합적으로 "타입"이라 불리는 클래스, 인터페이스, 델리게이트(delegate), 에뉴머레이션(enumeration), 및 구조의 집합을 정의한다. 클래스는 참조 할당 의미론(semantics)을 가지는 관리된 힙(heap) 할당 데이터를 나타낸다. 델리게이트는 객체 지향 함수 포인터이다. 에뉴머레이션은 명명된 상수를 나타내는 특별한 종류의 값 타입이다. 구조는 값 할당 의미론을 가지는 정적 할당된 데이터를 나타낸다. 인터페이스는 다른 타입들이 구현할 수 있는 계약을 정의한다.
명칭 공간을 이용함으로써, 설계자는 타입 세트를 계층적 명칭공간으로 조직화할 수 있다. 설계자는 각 그룹이 논리적으로 관련된 기능을 노출하는 적어도 하나의 타입을 포함하는 복수의 그룹을 타입 세트로부터 생성할 수 있다. 예로 든 구현에서, API(142)는 3개의 루트 명칭공간을 포함하도록 조직화된다. 유의할 점은, 단지 3개의 루트 명칭 공간이 도 2에 예시되어 있지만, 추가적인 루트 명칭 공간이 API(142) 내에 포함될 수도 있다는 점이다. API(142)에 예시된 3개의 루트 명칭 공간은 프리젠테이션 서브시스템을 위한 제1 명칭 공간(200, 사용자 인터페이스 셀에 대한 명칭 공간(202)을 포함함), 웹 서비스를 위한 제2 명칭 공간(204), 및 파일 시스템을 위한 제3 명칭 공간(206)이다. 그리고나서, 각 그룹에 명칭이 할당될 수 있다. 예를 들면, 프리젠테이션 서브시스템 명칭 공간(200)에서의 타입에는 명칭 "윈도우즈(Windows)"가 할당되고, 파일 시스템 명칭 공간(206)의 타입에는 명칭 "저장(Storage)"이 할당될 수 있다. 명명된 그룹들은 전체 시스템 명칭 공간과 같은 시스템 레벨 APIdp 대한 단일 "글로벌 루트"명칭 공간 하에서 조직화될 수 있다. 최상부 레벨 식별자를 선택하고 프리픽싱(prefix)함으로써, 각 그룹의 타입들이 타입을 포함하는 그룹의 명칭에 프리픽스된 선택된 최상부 레벨 식별자를 포함하는 계층적 명칭에 의해 용이하게 참조될 수 있다. 예를 들면, 파일 시스템 명칭 공간(206)에서의 타입들은 계층적 명칭 "System.Storage"를 이용하여 참조될 수 있다. 이와 같이, 개별적인 명칭 공간(200, 204 및 206)은 시스템 명칭 공간의 주요 분기(branch off)가 되고, 개별적인 명칭 공간이 "System." 프리픽스와 같은 지정자로 프리픽스되는 지정을 수반할 수 있다.
프리젠테이션 서브시스템 명칭공간(200)은 프로그래밍 및 컨텐트 개발에 관련된다. 이는 어플리케이션, 문서, 매체 프리젠테이션 및 다른 컨텐트의 생성을 허용하는 타입을 공급한다. 예를 들면, 프리젠테이션 서브시스템 명칭공간(200)은 개발자들이 오퍼레이팅 시스템(146(1)) 및/또는 오브젝트 모델 서비스(146(2))로부터 서비스를 얻을 수 있도록 하는 프로그래밍 모델을 제공한다.
셀 명칭공간(202)은 사용자 인터페이스 기능에 관련된다. 이는 개발자들이 자기 어플리케이션에 사용자 인터페이스 기능을 내장할 수 있도록 하는 타입을 공급하고, 또한 개발자들이 사용자 인터페이스 기능을 확장할 수 있게 한다.
웹 서비스 명칭공간(204)은 다양한 어플리케이션, 예를 들면 인트라넷 상의 2개의 피어들 사이에서 동작하는 채팅 어플리케이션과 같이 간단한 어플리케이션 및/또는 수백만 사용자들에 대한 스케일링가능한 웹 서비스와 같이 복잡한 어플리케이션의 생성을 가능하게 하기 위한 인프라구조에 관련된다. 기재된 인프라구조는 바람직하게는 특정 솔루션의 복잡도에 적합한 이들 부분들만을 이용할 필요가 있다는 점에서 매우 가변적이다. 인프라구조는 다양한 스케일 및 복잡도의 메시지 기반 어플리케이션을 구축하기 위한 기반을 제공한다. 인프라구조 또는 프레임워크는 기본 메시징, 안전한 메시징, 신뢰성있는 메시징 및 거래되는 메시징을 위한 API를 제공한다. 이하에 설명된 실시예에서, 연관된 API는 유틸리티, 이용가능성, 확장가능성 및 버전 변경성을 균형잡아주는 주의깊게 정밀 제작되는 방식으로 명칭 공간의 계층의 하나의 요인으로 포함된다.
파일 시스템 명칭공간(206)은 저장에 관련된다. 이는 정보 저장 및 검색을 허용하는 타입을 공급한다.
프레임워크(132)뿐만 아니라, 프로그래밍 툴(210)은 웹 서비스 및/또는 어플리케이션을 구축할 때 개발자를 지원하도록 제공된다. 프로그래밍 툴(210)의 하나의 예는 비주얼 스튜디오로서, 마이크로소프트사에 의해 제공되는 프로그래밍 툴의 다국어 슈트(suite)이다.
루트 API 명칭 공간
도 3은 프리젠테이션 서브시스템(200)을 더 상세하게 도시하고 있다. 하나의 실시예에서, 명칭의 스트링이 주기로 연쇄되는 계층적 명명 관례에 따라 명칭 공간이 식별된다. 예를 들면, 프리젠테이션 서브시스템 명칭공간(200)은 루트 명칭"System.Windows"에 의해 식별된다. "System.Windows"명칭 공간내에, "System.Windows.Explorer"로 식별되는 셀에 대한 또 다른 명칭 공간이 존재하고, 이는 "System.Windows.Explorer.Controls"로 알려진 컨트롤에 대한 또 다른 명칭 공간을 더 식별한다. 이러한 명명 관례를 염두에 두고, 다른 명명 관례가 동일한 효과를 가지고서 이용될 수 있지만, 이하는 프리젠테이션 서브시스템 명칭 공간(200)의 일반적인 개관을 제공한다.
셀 명칭 공간(202, "System.WIndows.Explorer")는 엔드 사용자가 저장 시스템의 아이템, FTP 위치 또는 DAV(Distributed Authoring and Versioning) 위치의 파일, 제어 패널의 제어 패널 애플릿, 어플리케이션 등과 같은 엔드 포인트 세트를 탐색하고 네비게이션할 수 있도록 허용하는 사용자 인터페이스 기능을 지원하는 클래스 및 API를 포함한다. 이러한 네비게이션은 폴더내의 폴더를 여는 것뿐만 아니라 다수의 폴더 중 하나를 여는 것을 포함할 수 있다. 셀 명칭 공간(202)은 개발자들이 그러한 기능을 그 어플리케이션들에 내장하도록 허용하고, 또한 개발자들이 이러한 탐색 및 네비게이션 기능을 확장할 수 있게 한다. 윈도우즈 오퍼레이팅 시스템의 버전에서, 이러한 사용자 인터페이스는 통상 "익스플로러"로서 지칭된다.
일부 실시예들에서, 셀 명칭 공간(202)의 사용자 인터페이스 기능이 사용자로 하여금 탐색하고 네비게이션할 수 있도록 하는 저장 시스템은 모든 종류의 정보를 조직화하고, 검색하고 공유하기 위한 액티브 저장 플랫폼이다. 이러한 플랫폼은 풍부한 데이터 모델을 정의하고, 관계형 저장 엔진의 상부 상에 구축하며, 유연한 프로그래밍 모델을 지원하고, 데이터를 모니터링하고 관리하고 조작하기 위한 데이터 서비스 세트를 제공한다. 데이터는 파일 기반 또는 비파일 데이터일 수 있고, 데이터는 통상 "아이템"으로서 지칭된다. 파일 시스템은 개인적인 컨택트, 이벤트 달력 및 이메일 메시지와 같은 비파일 데이터인 아이템을 다루므로, 파일 시스템들에 의해 통상 제공되는 기능을 확장시킨다. 그러한 파일 시스템의 하나의 예는 "WinFS" 파일 시스템이다.
셀 명칭 공간(202)의 사용자 인터페이스 기능이 사용자로 하여금 탐색하고 네비게이션할 수 있도록 하는 저장 시스템의 범용 데이터 저장소는 저장소에 상주하는 데이터의 조직화, 탐색, 공유, 동기화 및 보안을 지원하는 데이터 모델을 구현한다. 이러한 데이터 저장소의 저장 정보의 기본적인 유닛은 아이템으로 지칭된다. 데이터 모델은 아이템 및 아이템 확장자를 선언하고, 아이템들간의 관계를 확립하며, 폴더 및 카테고리의 아이템을 조직화하기 위한 메커니즘을 제공한다.
아이템은 단순한 파일과는 달리, 저장 시스템에 의해 사용자 또는 어플리케이션 프로그램에 노출되는 모든 오브젝트에 걸쳐 공통으로 지원되는 기본적인 속성 세트를 가지는 오브젝트이다. 아이템은 새로운 속성 및 관계가 도입되도록 허용하는 특징을 포함한 모든 아이템 타입에 걸쳐 공통으로 지원되는 속성 및 관계를 가지고 있다. 이러한 속성 및 관계 데이터는 아이템과 연관된 메타데이터로서 지칭될 수 있다. 이하에 더 상세하게 설명되는 바와 같이, 메타 데이터는 아이템 선언 스키마에 따라 저장될 수 있다. 이러한 아이템 선언 스키마는 아이템을 사용자에게 제공하는 적절한 방식을 나타낸다.
아이템은 복사, 삭제, 이동, 열기, 인쇄, 백업, 복원, 복제 등과 같은 dfl반적인 오퍼레이션에 대한 오브젝트들이다. 아이템은 저장되거나 검색될 수 있는 유닛이고, 저장 플랫폼에 의해 조작되는 모든 저장가능한 정보 형태는 아이템, 아이템의 속성 또는 아이템들간의 관계로서 존재하고, 이들 각각은 이하에 더 상세하게 설명된다. 아이템들은 컨택트, 사람들, 서비스, 위치, 문서(모든 다양한 종류), 등과 같은 데이터의 실제-세계 및 용이하게-이해가능한 유닛을 나타내려는 것이다.
아이템은 단독 오브젝트이다. 따라서, 아이템이 삭제되면, 아이템의 모든 속성이 또한 삭제된다. 마찬가지로, 아이템을 검색하는 경우, 수신된 것은 아이템 및 아이템의 메타 데이터에 포함된 모든 속성이다. 일부 실시예들은 특정 아이템을 검색할 때 속성의 서브세트를 요구할 수 있게 한다. 그러나, 다수의 그러한 실시예들에 대한 디폴트는 검색된 경우에 아이템에 모든 즉각적이고 계승된 속성을 제공하는 것이다. 더구나, 아이템의 속성은 새로운 속성을 현재의 아이템 타입의 속성에 부가함으로써 확장될 수 있다. 이들 "확장자"들은 그런 다음 아이템의 진실한 속성이고, 그 아이템 타입의 서브 타입은 자동으로 확장 속성을 포함한다. 확장자는 파일과 연관된 메타 데이터로서 지칭될 수 있다.
아이템 그룹은 아이템 폴더(파일 폴더와 혼동되어서는 안된다)라 불리는 특별한 아이템으로 조직화될 수 있다. 그러나, 대부분의 파일 시스템과는 달리, 아이템은 하나 이상의 아이템 폴더에 속할 수 있으므로, 아이템이 하나의 아이템 폴더에 액세스되어 수정된 경우, 이러한 수정된 아이템은 다른 아이템 폴더로부터 바로 액세스될 수 있다. 실제, 아이템으로의 액세스가 다른 아이템 폴더로부터 발생하지만, 실제로 액세스되고 있는 것은 사실상 매우 동일한 아이템이다. 그러나, 아이템 폴더는 반드시 그 멤버 아이템의 모두를 소유하지 않거나 다른 아이템 폴더와 조합하여 아이템을 동시 소유함으로써, 아이템 폴더의 삭제가 반드시 아이템의 삭제로 나타나지 않는다.
아이템 그룹은 카테고리로 조직화될 수 있다. 아이템 폴더는 서로 관련되지 않는(즉, 공통 기술된 특징을 가지지 않는) 아이템을 포함하는데 반해, 카테고리의 각 아이템은 그 카테고리에 대해 기술되는 공통 타입, 속성 또는 값("공통성")을 가진다는 점에서, 카테고리는 아이템 폴더와는 개념적으로 다르고, 카테고리내에서 다른 아이템들로의 관계 및 이들 간의 관계에 대한 기초를 형성하는 것이 이러한 공통성이다. 더구나, 특정 폴더의 아이템의 멤버 자격은 그 아이템의 임의의 특정 양태에 기초하여 강제적이 아닌데 반해, 일부 실시예들에 대해, 카테고리에 카테고리적으로 관련된 공통성을 가지는 모든 아이템들은 하드웨어/소프트웨어 인터페이스 시스템 레벨에서 자동으로 카테고리의 멤버가 된다. 개념적으로는, 카테고리는 그 멤버 자격이 특정 질의의 결과에 기초하는(예를들면, 데이터베이스의 컨텍스트에서) 가상 아이템 폴더로서 간주될 수 있을 것이고, 이러한 질의(카테고리의 공통성에 의해 정의됨)의 조건을 충족하는 아이템들은 따라서 카테고리의 멤버 자격을 포함할 것이다.
파일, 폴더 및 디렉토리와 비교하여, 본 발명의 아이템, 아이템 폴더 및 카테고리는 물리적 컨테이너의 개념적 등가를 가지지 않으므로, 본질상 특징적으로"물리적"이지는 않으며, 따라서 아이템은 그러한 하나 이상의 위치에 존재할 수 있다. 아이템이 카테고리로 조직화될 뿐만 아니라 하나 이상의 아이템 폴더 위치에 존재하는 성능은 하드웨어/소프트웨어 인터페이스 레벨에서, 본 기술분야에서 현재 가용한 것보다, 향상되고 풍부한 정도의 데이터 조작을 제공한다.
아이템들은 2개 이상의 아이템들간의 관계가 결정되도록 허용하는 관계 정보를 포함한다. 관계는 이진 관계로서, 하나의 아이템은 소스로서 지정되고 나머지 아이템은 타겟으로서 지정된다. 소스 아이템 및 타겟 아이템은 관계에 의해 관련된다.
범용 데이터 저장소의 아이템들은 사용자가 볼 수 있도록 하고 하드웨어/소프트웨어 인터페이스와 상호작용할 수 있도록 하는 사용자 인터페이스(셀 명칭 공간(202)의 클래스 및 API를 이용함)를 제공하는 셀 블라우저에 의해 사용자에게 제공된다. 범용 데이터 저장소의 각 아이템은 범용 데이터 스키마에 따라 저장된다. 이러한 스키마는 타입 결합(association)이라 불리는 아이템을 기술하기 위한 메커니즘을 포함한다. 각 타입 결합은 셀에서 기본적인 표현을 가지고 있다. 타입 결합에 따라 아이템을 저장함으로써, 셀은 적어도 기본 또는 디폴트 디스플레이 뷰에 따라 아이템을 표시할 수 있다.
타입 결합은 아이템과 연관된 속성이다. 데이터를 범용 데이터 저장소에 저장할 때, 그 데이터와 연관된 하나 이상의 속성은 아이템이 어떤 타입인지를 결정하기 위해 선언되어야 한다. 이들 속성들은 데이터와 연관된 메타 데이터로서 포함될 수 있다. 셀은 아이템에 대해 선언되어야 되는 가장 기본적이고 최소한의 속성을 나타내는 디폴트 타입 결합의 세트를 가지고 있다.
속성 선언을 넘어, 아이템과 연관된 메타 데이터는 셀이 아이템 프리젠테이션을 장식하는 방식을 나타내는 데이터를 포함한다. 이 경우에, 장식(Decoration)은 아이템을 사용자에게 표현하는 방법에 관한 "힌트"로서 간주될 수 있다. 이러한 메타 데이터는 아이템 장식 스키마에 따라 저장될 수 있다. 아이템 장식 스키마는 셀이 아이템을 제공하기 위해 활용하는 아이템 장식 뷰를 정의한다. 예를 들면, 아이템 장식 데이터는 아이템에 대한 가장 중요한 선언된 속성을 기술할 수 있다. 이들"높은 값"의 속성은 셀에서 프리젠테이션을 위해 가장 바람직할 수 있다.
아이템을 프리젠팅하기 위해, 아이템 장식 데이터는 아이템의 프리젠테이션을 위해 적절한 뷰 필드 세트를 나타낼 수 있다. 뷰 필드는 선언된 속성들의 투영(projection)이고, 공통 뷰 필드는 "제목","저자","생성 일시"또는 "최종 편집됨"을 포함한다. 셀은 표준 뷰 필드 세트를 포함하고, 독립적인 소프트웨어 벤더(ISV)는 그 데이터의 프리젠테이션을 위해 적절한 뷰 필드를 정의한다. 새로운 아이템 타입을 개발할 때, ISV는 이들이 정의하는 아이템 속성을 셀의 뷰 필드에 매핑하거나, 그 자신의 뷰 필드를 제공할 수 있다.
예를 들면, 특정 아이템 데이터는 노래 데이터를 포함할 수 있다. 선언된 속성 세트는 노래 제목, 가수, 녹음된 날짜, 앨범, 노래 길이, 및 그러한 노래 아이템에 적합한 다른 선언과 같은 속성들을 포함한다. 아이템 장식 데이터는 셀에서 아이템을 프리젠팅할 때 뷰 필드 "제목", "가수" 및 "앨범"이 사용자에게 표시되어야 한다는 것을 나타낸다.
아이템 장식은 셀에 의해 지원되는 디스플레이의 임의의 양태일 수 있다. 일부 공통 다른 아이템 선언은 예를 들면 데이터 포맷팅, 디폴트 소트 순서, 및 디폴트 아이콘 크기이다. 추가적으로, 아이템 장식은 주어진 아이템을 표시할 때 이용하는 공통 컨트롤을 기술할 수 있다. 예를 들면, 등급(ratings) 필드는 등급을 별의 열로서 표현하는 등급 컨트롤을 이용할 수 있다. 아이템 장식 데이터는 아이템으로 이용하기에 적합한 태스크 또는 동사를 기술한다. 용어 "태스크" 및 "동사"는 아이템에 관련하여 취해지는 일부 액션을 기술하고, 그러한 용어들은 상호교환가능하게 이용될 수 있다. 예를 들면, "편집" 또는 "미리보기"는 아이템과 연관된 적절한 태스크/동사일 수 있다. 셀은 아이템과 관련한 액션을 수행하는 사용자 선택시 이들 태스크들을 지원하여 어플리케이션을 런칭하도록 더 구성될 수 있다.
아이템 장식 뷰는 주어진 아이템 또는 유사한 아이템 장식 뷰로 구성되는 동질의 아이템 세트를 완전하게 제공하기에 충분한다. 다른 아이템 장식 스키마로 아이템을 표시하기 위해, 셀은 셀 장식 뷰에 따라 아이템을 제공하는 셀 뷰 스키마를 제공한다. 셀 뷰 스키마는 셀 또는 ISV가 주어진 이종 데이터 세트에 대한 적절한 뷰를 선언할 수 있도록 허용한다.
셀 장식 뷰 내에서 표현을 위해 선택된 아이템들은 공통 특성을 포함한다. 다양한 공통 특성은 셀 장식 뷰에 대해 수용가능하다. 예를 들면, 셀 뷰 스키마는 공통적이고 적절한 필드를 표시하는데 이용되는 "그림" 뷰 및 모든 주지된 그림 타입(예를 들면, .GIF, .JPEG, .BMP, .TIFF, 등)에 대한 메타 데이터를 정의한다. 셀 뷰 스키마는 주어진 아이템 장식 뷰에 대한 상충되는 디스플레이 속성을 무시한다. 또 다른 예로서, 이들 각 아이템에 대한 아이템 장식이 서로 크게 다르더라도, 셀은 적절한 칼럼 주위에 최적화된 "문서"셀 뷰 및 워드 프로세싱 문서, 스프레드시트 또는 데이터베이스와 같은 전형적인 생산력(productivity) 어플리케이션에 의해 생성된 아이템에 대한 메타데이터를 제공할 수 있다. 그러한 뷰는 이들 문서들 각각의 사이에서 공통 속성을 제공함으로써 값을 가진다. 나중의 문서 타입이 설치된 경우에, 뷰가 처음 생성되었을 때 새로운 타입이 고려되지 않았더라도, 셀 뷰는 일관된 셀 뷰에 따라 이들 새로운 아이템들을 프레젠팅할 수 있다.
셀 뷰 스키마는 다양한 디스플레이 속성을 제공하고, ISV는 그러한 셀 뷰를 제공하기를 원할 수 있다. 디스플레이 속성은 미리보기 팬의 크기, 미리보기 팬내에 표시할 메타 데이터, 이용되는 관례적인 컨트롤, 및 프리젠팅된 아이템에 적합한 태스크 및 동사를 포함하고, 이들로 제한되지 않는다.
셀은 익스플로러 디스플레이 뷰에 따라 아이템을 프리젠팅할 수 있다. "익스플로러"는 저장 어플리케이션으로 지칭될 수 있고, 셀 또는 ISV에 의해 제공될 수 있다. 익스플로러는 예를 들면, 사용자가 데이터 저장소의 선택된 아이템을 뷰하고, 질의하며, 네비게이션하고, 태스크에 런칭하거나 조직화할 수 있도록 한다. 용어 "익스플로러"는 표시되는 아이템이 거주하는 위치를 암시하지 않으며, "activity center", "viewer" 및 "라이브러리"와 같은 용어는 "익스플로러"와 상호교환가능하게 이용되어 저장 어플리케이션을 기술한다.
익스플로러 스키마 계층의 예는 아이템 뷰 스키마인 기저 레이어를 포함한다. 아이템 뷰 스키마는 아이템을 표현하는데 필요한 기본적인 디스플레이를 제공하고, 익스플로러 뷰 스키마는 필요한 경우에 그 디스플레이 요소를 지연시키거나 대체시킬 수 있다.
익스플로러 뷰 스키마는 셀 뷰 스키마 및 익스플로러 장식을 포함한다. 익스플로러 장식은 익스플로러를 전반적으로 장식하고 다른 색상 및 브랜딩 요소와 같은 디스플레이 요소를 제공한다. 이들 익스플로러 장식들은 익스플로러가 제공하는 다양한 뷰들 사이에서 지속된다. 다양한 디스플레이 속성이 익스플로러 장식에 대해 적절한다. 예를 들면, 익스플로러 아이템과 연관된 데이터 질의 또는 태스크/동사는 익스플로러로 표시하기에 적합하다. 표시된 태스크들은 종종 태스크를 수행할 수 있는 어플리케이션과 결합된다.
익스플로러 뷰 스키마는 선택적으로 하나의 셀 뷰 스키마 또는 복수의 셀 뷰 스키마를 포함할 수 있다. 셀 뷰 스키마는 익스플로러 아이템의 서브 세트에 대한 셀 뷰를 제공하도록 구성된다. 예를 들면, 익스플로러는 사용자에게 노래 아이템을 표시하도록 구성될 수 있다. 제1 셀 뷰 스키마는 앨범의 디스플레이를 제공하도록 포함되고, 제2 셀 뷰 스키마는 노래 트랙의 디스플레이를 제공하도록 포함된다. 이러한 방식으로, 양쪽 아이템 타입이 익스플로러 내에 적절한 뷰들을 가지게 된다. 상기 설명된 바와 같이, 셀 뷰의 활용은 선택적으로 공통 특징을 공유할 수도 있는 아이템 세트의 프리젠테이션에 관련된다.
익스플로러는 셀 내에 포함된 셀 뷰에 좌우된다. 익스플로러 내에서 프리젠테이션을 위해 선택된 아이템들이 익스플로러에 의해 포함된 임의의 셀 뷰에 의해 지원되지 못한다면, 셀은 익스플로러 내에서의 이용을 위해 적절한 셀 뷰를 제공한다. 마찬가지로, 그리고 상기 설명된 바와 같이, 익스플로러는 셀에 의해 제공된 아이팀 디스플레이 뷰 또는 디폴트 디스플레이 뷰를 대체할 수 있다. 이러한 기능은 셀에 의해 표시될 수 있는 임의의 아이템이 익스플로러 내에서 표시할 수 있도록 보장한다. 익스플로러는 이들 셀 제공된 디스플레이 스키마를 지연시키도록 구성되거나, 예를 들면 예측되지 않은 데이터에 대한 디스플레이를 제공하도록 이들에 좌우된다.
셀 명칭 공간(202)은 아이템에 대한 기저 데이터(예를 들면, 파일 컨텐츠, 이미지 데이터, 컨택트 정보 데이터, 등)가 저장된 위치에 관계없이 일관된 방식으로 아이템들이 조작되고 상호작용될 수 있도록 하는 사용자 인터페이스 기능을 지원한다. 어플리케이션 설계자의 관점에서, 셀 명칭 공간(202)에 의해 지원되는 기능으로 인해, 적어도 부분적으로는 기저 데이터가 다른 위치에 저장됨에도 불구하고 그러한 아이템이 일관된 방식으로 처리될 수 있으므로 더 나은 개발 체험을 가지게 된다. 그러한 다른 데이터 저장 위치의 가능한 존재에도 불구하고, 셀 명칭 공간(202)을 이용할 때 설계자에게 시종일관된 체험이 제공된다.
셀 명칭 공간(202)은 컨트롤 명칭 공간(302), 다이얼로그 명칭 공간(304), 애드인(Addin) 명칭 공간(306), 및 데스크탑 명칭 공간(308)을 포함하는 추가적인 명칭 공간을 정의한다. 셀 명칭 공간내의 이들 추가 명칭 공간(302, 304, 306 및 308)의 각각은 이하에 상세하게 설명되는 바와 같이 컨트롤, 다이얼로그 및/또는 핸들러와 같은 다양한 기능을 제공하는 하나 이상의 서비스 또는 컴포넌트를 포함한다.
셀 명칭 공간(202)은 추가적인 명칭 공간(302, 304, 306 및 308) 각각에 의해 이용될 수 있는 오브젝트 모델을 정의한다. 이러한 오브젝트 모델은 이하의 오브젝트들을 포함한다.
· 파일 폴더, 스택, 개별적인 파일, 개별적인 WinFS 아이템(예를 들면, 앨범, 노래, 그림, 등), 등과 같이, 셀을 통해 사용자에게 프리젠팅될 수 있는 아이템을 기술하는데 이용되는 ExplorerItem 오브젝트(또는 아이템 오브젝트로도 지칭됨).
· ExplorerItem에 대한 질의를 기술하는데 이용되는 Library 오브젝트.
· 사용자에게 표시하기 위해 아이템(예를들면, ExplorerItem 오브젝트에 의해 표현됨)으로부터 데이터를 투영하는데 이용되는 ViewField 오브젝트(속성 오브젝트로도 지칭됨). 저장 시스템에서 속성들 사이에 정의된 투영(projection) 및 ViewField 오브젝트는 ExplorerItem에 기초하여 추가 계산 또는 처리를 수행한다. 예를 들면, 저장 디바이스를 나타내는 폴더가 표시되고 있고 설계자가 그 폴더내에 그 저장 디바이스 상의 자유 공간양을 포함하고 싶은 경우, 투영은 저장 디바이스의 전체 용량 및 저장 디바이스 상에 저장된 파일(ExplorerItem으로 표현됨)의 크기에 기초하여 자유 공간의 양을 계산한다.
· 라이브러리 오브젝트의 일관된 형태인 다이나믹 리스트로의 링크를 기술하는데 이용되는 StorageFavorite 오브젝트. StorageFavorite 오브젝트는 질의와, 그 질의의 결과를 사용자에게 프리젠팅하기 위한 뷰의 조합이다.
이러한 오브젝트 모델은 발명의 명칭이 "System and method for presenting items to a user with a contextual presentation"이고, 2003년 10월 23일자로 출원된 미국특허출원 번호 제_____호, 변리사 문서 번호 제 MFCP.109834(MS# 306923.01)호에 더 상세하게 기재되어 있으며, 참고로 여기에 첨부하였다.
컨트롤 명칭 공간(302, "System.Windows.Explorer.Controls")은 어플리케이션에 의해 이용될 수 있는 재사용가능한 사용자 인터페이스 컨트롤의 집합을 정의한다. 복수의 다른 어플리케이션들이 이들 컨트롤을 이용할 수 있으므로, 이들 컨트롤들은 재사용가능한 것으로 보여질 수 있다. 어플리케이션 설계자들이 자기 자신의 컨트롤 버젼을 설계하기 보다는 이들 컨트롤에 의존할 수 있으므로, 이러한 재사용가능한 컨트롤의 집합은 어플리케이션의 설계를 단순화시킬 수 있다. 추가적으로, 이러한 재사용가능한 컨트롤 집합을 이용함으로써, 복수의 어플리케이션에 대한 일관된 모습과 느낌이 달성될 수 있다.
컨트롤 명칭 공간(302)에 의해 정의되는 컨트롤들은 사용자 인터페이스에서의 아이템의 조작 및/또는 디스플레이를 포함하여, 사용자 인터페이스의 셀의 조작 및/또는 디스플레이를 허용한다. 상기 설명된 바와 같이, 사용자 인터페이스의 셀 내에 표시될 수 있는 이들 아이템들은 다양한 종류의 데이터 중 임의의 하나를 나타내고, 단순히 파일 시스템에 저장된 전통적인 "파일"은 아니다. 또한, 컨트롤 명칭 공간(302)에 의해 정의된 컨트롤은 어플리케이션 설계자들이 다양한 위치로부터의 데이터로 작업할 때 동일한 컨트롤을 이용할 수 있도록 허용함으로써, 일관되고 시종일관된 설계 체험을 제공한다.
컨트롤 명칭 공간(302)은 이하의 재사용가능한 컨트롤을 정의한다.
·ExplorerView 컨트롤은 저장 사용자 체험을 인캡슐레이션하는데 이용된다. 저장 사용자 경험은 관계를 가지는 아이템, 질의, 등에 걸쳐 작용하도록 정의된다. 이러한 저장 사용자 체험은 엔드 사용자들이 예를 들면 속성값에 기초하여 질의를 발행하고, 공통 속성값으로 WinFS 아이템을 스택하며, (예를 들면, 속성 술어의 속성값을 스택에 존재하는 것으로 설정함으로써) 비스택된 아이템으로부터 스택으로의 드래그 앤 드롭(drag and drop)을 허용할 수 있게 한다. ExplorerView 컨트롤은 또한 이전 버전의 마이크로소프트 윈도우즈 오퍼레이팅 시스템(예를 들면, 윈도우즈 오퍼레이팅 시스템 중 윈도우즈 XP 또는 윈도우즈 98 버전)과 같은 이전 오퍼레이팅 시스템(또한 레거시 시스템으로도 지칭됨)에서 발견될 수 있는 동일한 외관을 가지는 디스플레이를 위한 폴더를 기술한다.
·ExplorerItemView 컨트롤은 ExplorerItem을 표시하는데 이용된다. ExplorerItem의 레이아웃 및 디자인은 어플리케이션 설계자에 의해 정의될 수 있다. 오퍼레이팅 시스템은 또한 어플리케이션 설계자에 의해 정의될 수 있는 레이아웃 및 디자인에 일부 제한을 부과하는 사용자 체험을 정의하고, 따라서 어플리케이션 설계자에 의해 정의된 레이아웃 및 디자인은 오퍼레이팅 시스템에 의해 정의되는 사용자 체험과 일치된다. 그러므로, ExplorerItemView 컨트롤은 설계자가 사용자에게 어떤 데이터를 표시할 지 뿐만 아니라, ExplorerItem으로부터 사용자에게 데이터를 어떻게 표시할 지(예를 들면, 칼럼, 로우 또는 일부 다른 구성으로)를 결정할 수 있게 한다.
·아이템들이 사이드바(사이드바는 이하에 더 상세하게 설명된다)에 부가될 수 있도록 하는데 이용되는 BasketControl 컨트롤. 아이템은 커서 제어 디바이스를 이용하여 아이템을 선택하고 이를 사이드바 위로 드래그하며 거기에 드롭되게 함으로써(예를 들면, 커서 제어 버튼을 해제함으로써) "드래그 앤 드롭" 방식으로 사이드바에 부가될 수 있다. BasketControl 컨트롤은 발명의 명칭이 "Extensible Creation and Editing of Integrated Collections"이고 출원일이 2003년 10월 13일인 미국특허출원번호 제---호, 변리사 문서번호 제 003797.00695(MS#304631.1)에 더 상세하게 설명되어 있고, 참고로 여기에 첨부되었다.
·아이템들이 리스트 또는 그룹에 추가되도록 허용하는데 이용되는 ListMaker 컨트롤. 아이템의 리스트 또는 그룹은 커서 제어 디바이스를 이용하여 아이템을 선택하고 이를 적절한 리스트 또는 그룹 위로 드래그하며 거기에 드롭되게 함으로써(예를 들면, 커서 제어 버튼을 해제함으로써) "드래그 앤 드롭" 방식으로 생성될 수 있다. 예를 들면, 아이템들은 노래이고 리스트는 재생 목록이며, 아이템이 이미지이고 리스트는 사진 앨범이 될 수 있다.
·아이템의 미리보기 이미지들이 사용자에게 프리젠팅되도록 허용하는데 이용되는 PreviewImageControl 컴포넌트. 아이템이 선택된 경우, 미리보기 이미지가 사용자에게 프리젠팅될 수 있고, 미리보기 이미지는 이미지에 대한 썸네일(thumbnail)보다 크지만 사용자 인터페이스의 전체 디스플레이 영역보다는 작다.
다이얼로그 명칭 공간(304, "System.Windows.Explorer.Diaglos")은 어플리케이션에 의해 이용될 수 있는 사용자 인터페이스 다이얼로그 및 마법사의 집합을 정의한다. 컨트롤 명칭 공간(302)의 컨트롤과 유사하게, 다이얼로그 명칭 공간(304)의 다이얼로그 및 마법사는 복수의 다른 어플리케이션들이 이들 다이얼로그 및 마법사들을 이용할 수 있도록 재이용될 수 있다. 이러한 재사용가능한 다이얼로그 및 마법사 집합은 복수의 어플리케이션에 걸쳐 일관된 모습 및 느낌을 유지하는데 도움을 준다.
다이얼로그 명칭 공간(304)에 의해 정의되는 다이얼로그 및 마법사들은 액션들이 사용자 인터페이스의 셀 내에서 수행될 수 있도록 한다. 상기 설명된 바와 같이, 이들 셀들은 다양한 종류의 데이터 중 임의의 하나를 표현할 수 있고 단순히 파일 시스템에 저장된 전통적인 "파일"은 아닌 아이템에 기초할 수 있다. 또한, 다이얼로그 명칭 공간(304)에 의해 정의된 다이얼로그 및 마법사는 다양한 위치로부터의 데이터로 작업할 때 어플리케이션 설계자들이 동일한 다이얼로그 및 마법사를 이용하도록 허용함으로써, 일관되고 시종일관된 설계 체험을 제공한다.
다이얼로그 명칭 공간(304)은 이하의 다이얼로그 및 마법사들을 정의한다.
·파일 및 폴더들이 열리고 저장될 수 있도록 하는데 이용되는 열기/저장 다이얼로그. 이들 다이얼로그들은 확장가능하고, 어플리케이션 설계자들이 다이얼로그의 기능을 확장할 수 있게 한다. 예를 들면, 이들 다이얼로그들은 어플리케이션 설계자들이 이용하고 싶은 파일 및/또는 폴더에 관한 다양한 추가 메타 데이터를 이용하도록 확장될 수 있다.
·CD 및/또는 DVD와 같은 광 디스크들이 기록될 수 있도록 하는데 이용되는 CD/DVD 굽기 마법사. 하드웨어 설계자는 CD 및/또는 DVD가 기록될 수 있도록 하는 그자신의 하드웨어 특정 단계들을 포함하는 자신의 마법사를 제공할 수 있다.
·전자 메일에 의해 이미지를 전송할 때 사용자들을 지원하는데 이용되는 사진 전송 마법사. 마법사는 사용자가 이미지를 특정 크기로 크기조정할 수 있게 한다. 마법자는 이미지를 전자 메일을 처리하는데 적합한 것으로 보이는 특정 크기로 크기 조정하거나, 다르게는 사용자가 2개 이상의 다른 크기로부터 선택할 수 있게 한다.
애드인(Addin) 명칭 공간(306, "System.Windows.Explorer.Addin")은 사용자 인터페이스 기능을 확장하기 위한 베이스 클래스 및 인터페이스의 집합을 정의한다. 애드인 명칭 공간(306)은 어플리케이션 설계자가 사용자 인터페이스의 기능을 확장하는 관리된 코드를 추가할 수 있도록 한다. 이러한 확장은 예를 들면 어플리케이션 설계자들이 사용자 인터페이스의 일부를 그들이 보기에 적합하도록 커스터마이징할 수 있게 한다.
애드인 명칭 공간(306)은 다양한 종류의 데이터 중 임의의 하나를 표현하고 단순히 파일 시스템에 저장되는 전통적인 "파일"이 아닌 아이템을 표시하는데 이용되는 사용자 인터페이스의 셀의 확장을 허용한다. 또한, 애드인 명칭 공간(306)은 사용자 인터페이스의 셀들이 시종일관된 방식으로 확장될 수 있게 함으로써, 더 관리되고 개선된 설계 체험을 제공한다.
다양한 기능에 대한 관리된 코드는 애드인 명칭 공간(306)에 의해 지원된다.
·컨텍스트 메뉴 핸들러. 컨텍스트 메뉴는 예를 들면 표시될 아이템에 대해 우측-클릭함으로써 액세스될 수 있다. 컨텍스트 메뉴 핸들러는 어플리케이션 설계자들이 이들 컨텍스트 메뉴에 부가될 그 자신의 엔트리를 정의할 수 있도록 한다.
·썸네일 추출기. 썸네일 추출기는 어플리케이션 설계자들이 그들 자신의 썸네일(예를 들면, 파일, 폴더 및/또는 표시될 아이템에 대해)을 개발하고 사용자에게 표시하기 위해 오퍼레이팅 시스템으로의 이들 썸네일을 식별할 수 있도록 한다.
·WinFS로부터 Explorer로의 투영을 조립/분해하기 위한 핸들러. 이들 핸들러들은 파일 및/또는 폴더에 관한 정보를 사용자에게 표시할 때 어플리케이션 설계자가 다양한 계산을 수행할 수 있게 한다(예를 들면, 저장 디바이스 상의 자유 공간의 양이 계산될 수 있게 한다).
데스크 탑 명칭 공간(308, "System.Windows.Explorer.Desktop")은 어플리케이션 설계자들이 사용자에게 표시되는 데스크 탑의 기능을 확장할 수 있도록 하는 기능 집합을 정의한다. 데스크탑 명칭 공간은 셀 명칭 공간(202, 예를 들면, "System.Windows.Explorer.Desktop")의 일부이거나, 다르게는 프리젠테이션 서브 시스템 명칭 공간(200)의 일부일 수 있지만, 셀 명칭 공간(202, "System.Windows.Desktop")의 일부는 아니다. 데스크탑 명칭 공간은 사이드 바 및 통지에 관련된 요소들을 포함한다. 데스크탑 명칭 공간에 사이드바 및 통지 요소를 포함시키는 것은, 사용자에게 사이드바 및 통지에 대한 중앙집중화된 제어를 제공한다. 예를 들면, 모든 어플리케이션으로부터의 통지에 관한 규칙은, 통지를 이용하는 각 어플리케이션에 대해 규칙 정의를 액세스하는 것을 통해 사용자가 네비게이션하도록 요구하는 것 보다는 사용자에 의해 한번 설정될 수 있다.
일반적으로, 사이드바는 지정된 통신 컨택트 및 정보 요소들이 다이나믹하게 추적되거나 수신되며 사용자에게 진행 기반으로 사용자에게 제공되는 통합된 인터액티브 주변장치 인식 디스플레이에서 다이나믹 통신 액세스 및 정보 인식을 제공한다. 일부 실시예들에서, 이러한 성능은 종래의 표시 디바이스의 하나의 에지를 따른 지속적인 표시 스트립의 하나 이상의 칼럼에 표시되는 적어도 하나의 커스터마이징가능한 다이나믹 썸네일을 통해 제공된다. 또한, 추가 실시예들에서, 썸네일은 전체 디스플레이를 포함하여, 디스플레이의 임의의 일부 또는 일부들에 표시된다. 전체 디스플레이가 덮여지는 실시예들은 사이드바가 예를 들면 핸드헬드 또는 팜 탑 컴퓨팅 디바이스, 셀 전화, 또는 제한된 디스플레이 영역을 가지는 임의의 다른 전자 디바이스와 같이 비교적 작은 디스플레이 영역을 가지는 디바이스 상에서 이용될 경우에 특히 유용하다.
각 커스터마이징가능한 다이나믹 썸네일은 예를 들면, 사용자가 관심있는 특정 통신 컨택트(예를 들면, 특정 개인, 기업, 조직 또는 다른 실체) 또는 특정 정보 요소를 나타낸다. 그러한 정보 요소는 예를 들면, 공유 파일이나 폴더가 변형된 때, 공유 데이터베이스 또는 작업공간내의 정보가 변경된 때, 이메일 상태, 달력, 인터넷 웹 페이지, 날씨 상황, 약속, 스케줄, 통계 정보, 주가, 교통 정보, 또는 사용자에게 관심이 있는 임의의 다른 인터넷 또는 네트워크 액세스가능 정보를 포함한다.
상기 언급된 다이나믹 썸네일은 통상 관심이 있는 컨택트 또는 정보를 기술하는 "타일"(또는 "티켓"으로도 지칭됨) 및 타일에 의해 표현되는 통신 컨택트 또는 정보를 모두 표시하기 위한 전용 "뷰어"의 조합을 포함한다. 각 타일 및 뷰어는 예를 들면 셀 명칭공간(202)에 의해 제공되는 사용자 인터페이스 기능에 의해 액세스될 수 있는 저장 시스템의 아이템이 될 수 있다. 하나 이상의 "서비스들"은 각 타일에 의해 기술된 정보의 현재 상태 및/또는 통신 컨택트의 상태와 자동으로 상호작용하고, 이들 추적하거나 수신하는데 이용된다. 그리고나서, 정보의 현재 상태 및 통신 컨택트의 상태는 아이템을 그래픽적으로 또는 텍스트적으로 표시하기 위한 인터액티브 주변장치 인식 인터페이스내에 상주하는 "컨테이너"에 각 타일을 호스팅함으로써 다이나믹하게 제공된다. 주변장치 인식 인터페이스는 사용자로의 임의의 잠재적인 혼란이나 방해를 감소시키는 방식으로 정보 및/또는 통신 컨택트를 표시한다.
일반적으로, 타일은 XML 데이터 파일과 같은 데이터 구조로 표현된다. 각 타일은 정보 또는 통신 컨택트에 액세스하거나 이들과 인터액트하기 위한 다수의 종래 수단 중 임의의 하나를 표현하는 특정 서비스로의 포인터뿐만 아니라, 타일에 의해 어떤 정보 또는 통신 컨택트가 표현되는 지에 관한 명령을 포함한다. 이들 서비스들은 선정되거나 사용자 정의가능한 서비스의 라이브러리로부터 자동으로 또는 수동으로 선택된다. 특히, 다른 서비스들은 임의의 관례적인 정보, 정보 소스 또는 통신 컨택트에 액세스하고, 수신하며 검색하거나, 다르게는 이들과 상호작용하기 위한 기능을 제공하는 공유 코드 또는 함수를 나타낸다. 이들 서비스들은 단독으로 또는 조합하여 이용된다는 점에서 공유되고, 하나 이상의 타일들에 의해 동시에 이용될 수도 있다. 결과적으로, 유의할 점은, 일부 실시예에서 복수의 서비스들은 임의의 관례적인 정보, 정보 소스 또는 통신 컨택트와의 복잡한 인터액션을 제공하기 위해 조합하여 이용된다는 점이다.
서비스의 하나의 예는 종래 MAPI 서버에 접속함으로써 이메일 폴더를 모니터링하기 위해 필요한 기능이다. 서비스의 다른 예는 이메일 메시지를 전송하거나 수신하기 위한 기능이다. 관련된 서비스들은 예를 들면 인스턴트 메시징 또는 피어-투-피어 통신 스킴과 같은 임의의 개수의 종래 방법들을 통해 컨택트와 통신하거나 정보를 전달하기 위한 기능을 제공한다. 서비스의 다른 예는 텍스트 파일을 하나의 언어에서 다른 언어로 변환하는 기능이다. 서비스의 추가 예는 데이터베이스를 모니터링하는데 필요한 기능이다. 서비스의 또 다른 예는 웹 사이트 또는 원격 서버로부터 데이터를 수신하거나 검색하기 위한 기능을 포함한다. 분명한 것은, 임의의 정보, 정보 소스 또는 통신 컨택트와 상호작용하기 위한 임의의 방법은 하나 이상의 타일에 의한 이용을 위해 공유 서비스로서 구현될 수 있다.
또한, 상기 지적된 바와 같이, 각 타일의 명령은 타일에 의해 표현되는 어떠한 타입의 정보나 통신 컨택트를 표시할 능력을 가지고 있는 다수의 전용 뷰어 중 하나로의 포인터를 포함한다. 환언하면, 각 타일은 정보 또는 컨택트에 액세스하고 이들과 상호작용하기 위한 다수의 서비스들 중 임의의 하나를 이용할 성능뿐만 아니라 사용자가 그러한 특정 정보 또는 컨택트를 보기 원하는 방법의 정의와 함께 사용자가 추적하기를 원하는 정보 또는 컨택트의 조합을 나타낸다. 그러한 액세스 또는 상호작용은 임의의 종래 통신 프로토콜을 통해 로컬로, 또는 로컬 인트라넷, 익스트라넷, 유선 또는 무선 네트워크, 인터넷 등을 통해 달성될 수 있다.
뷰어는 하나 이상의 서비스들을 통해 검색되는 정보 또는 컨택트 데이터를 가지는 크기조정가능한 썸네일 또는 아이콘-크기의 윈도우로서 타일을 그래픽적으로 표시한다. 특히, 뷰어는 정지 또는 활동 이미지, 또는 텍스트, 오디오 또는 그래픽 정보의 임의의 조합을 포함하여, 텍스트, 오디오, 또는 그래픽 정보를 가지는 타일을 다이나믹하게 표시할 수 있다. 예를 들면, 하나의 뷰어 타입은 컨택트 정보, 즉 "개인 타일"을 표시할 수 있고, 다른 뷰어는 예를 들면 수신된 메시지 개수 또는 특정 소스로부터의 메시지 개수와 같은 특정 이메일 정보를 ㅍ히할 수 있으며, 또 다른 뷰어는 데이터베이스와 상호작용하여 썸네일의 데이터베이스로부터 특정 정보의 요약을 제공하도록 설계된다. 뷰어 타입의 추가 예들은 정지 이미지, 비디오 이미지, 통신 상태의 요약, 데이터베이스 질의의 결과, 등을 표시할 수 있는 뷰어를 포함한다. 명백한 것은, 임의의 타입의 뷰어는 임의의 가능한 정보가 표시될 수 있도록 보장하도록, 임의의 대응하는 정보 타입과 연관되게 설계될 수 있다.
사이드바는 발명의 명칭이 "A systme and process for providing dynamic communication access and information awareness"인 미국특허 출원 번호 제10/063,296호에 더 상세하게 설명되어 있고, 참고로 여기에 첨부하였다.
명칭공간(308)의 사이드바 기능은 어플리케이션 설계자들이 타일을 사이드바에 부착할 수 있게 한다.
통지(예를 들면, 가청 또는 가시적 통지)는 통지를 처리하는 방법에 관한 결정을 위해 비교되는 3가지 요소들을 일부 실시예에 따라 포함하는 사용자 컨텍스트 시스템의 일부이다. 제1 요소는 사용자의 컨텍스트이다(오퍼레이팅 시스템 및 이것을 확장한 임의의 프로그램에 의해 제공됨). 제2 요소는 사용자의 규칙 및 선호도이다. 제3 요소는 통지(사용자의 규칙과 매칭하는 데이터 및 속성과 같은 요소를 포함한다) 자체이다.
사용자 컨텍스트 시스템은 오퍼레이팅 시스템 및 사용자의 컨텍스트를 선언하는 다른 프로그램에 의해 동작하고, 그런 다음에 시스템이 사용자의 컨텍스트와 규칙을 브로커링한다. 통지들은 시스템으로 호출하는 다른 프로그램들에 의해 올려진다. 통지의 사용자의 컨텍스트, 규칙 및 요소들이 비교된 후 통지로 무엇을 해야 할지에 관한 결정이 수행된다. 통지로 무엇이 수행되어야 할 지에 대한 다양한 옵션의 예들은 거절(예를 들면, 통지가 그리거나 노이즈를 만들도록 허용되지 않는 경우, 및 통지가 사용자에 의해 보여질 수 없는 경우), 지연(예를 들면, 통지가 사용자의 컨텍스트가 변경될 때까지 유지되거나, 후속적으로 전달하기에 적절하다는 것을 사용자의 규칙이 지시한다), 전달(예를 들면, 사용자의 컨텍스트 및 규칙에 따라 통지가 전달되도록 허용된다), 및 라우팅(예를 들면, 통지가 현재의 시스템에 전달되도록 허용될 지 여부에 관계없이 통지가 다른 시스템에 핸드오프되어야 된다는 것을 사용자의 규칙이 나타낸다)을 포함한다.
일반적으로, 사용자는 "비가용인" 것으로 간주되는 상태에 있을 수 있고, 이 경우에 통지는 사용자가 "가용하게" 될 때까지 전달되지 않거나 유지된다. 예를 들면, 사용자가 전체 스크린 어플리케이션을 운용하고 있다면, 사용자는 비가용인 것으로 간주될 수 있다. 그렇지 않다면, 사용자는 "가용하게" 되어 있지만, 통지가 사용자에게 적절하게 변형되는 것이 필요한 상태에 있다. 예를 들면, 사용자가 음악을 듣거나 모임에 있는 경우, 사용자는 통지가 사용자의 스크린에 전달은 되지만 그들이 발생시키는 소리는 더 조용하거나 전혀 발생되어서는 안된다고 나타낼 수 있다.
상기 지적된 바와 같이, 사용자 컨텍스트는 부분적으로는 통지가 사용자의 스크린 상에 표시될 지 여부를 결정할 수 있다. 통지가 표시되는 경우, 사용자 컨텍스트 내의 특정 구배(gradient)에 기초하여 표시된다. 환언하면, 지정될 수 있는 그려진 통지의 형태의 다른 레벨의 침해(invasiveness)가 존재한다. 예를 들면, 정상 통지는 클라이언트 영역으로 자유롭게 팝 아웃하여 윈도우를 간단하게 어둡게 할 수 있다. 사용자가 다소 제한된 컨텍스트 내에 있다면, 통지가 다른 윈도우의 상부 상에 그리는 것이 허용되지 않는 것처럼, 통지는 자유롭게 보여줄 수 있지만 단지 더 침해성이 적은 형태로 보여준다. 또 하나의 예로서, 사용자가 최대화된 어플리케이션을 운용하고 있는 하나의 실시예에서, 디폴트 설정이 될 수 있는데, 이는 컨텍스트가 다소 제한되어 있고, 사용자가 이 어플리케이션이 전체 클라이언트 영역을 얻기를 바란다는 명백하게 언급했다는 것을 의미한다. 이러한 설정에서, 통지는 여전히 그릴 수 있지만, 단지 사이드바의 내부에만 나타나도록 될 수 있다. 환언하면, 통지 그리기에서 이러한 타입의 감소된 침해는 통지의 영향을 줄이고, 전체는 지적인 부하를 줄여준다.
사용자 컨텍스트 시스템은 발명의 명칭이 "System and Method Utilizing Test Notifications"인 2003년 3월 26일에 출원된 미국특허출원번호 제10/402,179호에 더 상세하게 설명되어 있고, 참고로 여기에 첨부하였다.
명칭 공간(308)의 통지 기능은 어플리케이션 설계자들이 그 자신의 통지를 생성하고 이들을 데스크 탑 상에 표시되도록 하여 사용자에게 관심이 되는 어떤 일(예를 들면, 이메일 메시지가 수신되거나, 인스턴스 메시지가 수신되는 것)이 발생한 때를 사용자에게 통지한다. 명칭 공간(308)의 통지 기능은 또한 사용자에 대한 중앙 위치를 제공하여 복수의 어플리케이션으로부터 통지에 대한 규칙 및 선호도를 정의하고, 동일한 규칙 및 선호도를 복수회 설정하는 부담을 사용자로부터 덜어준다(복수의 어플리케이션 각각에 대해 한번만).
추가적으로, 컨택트 명칭 공간은 컨택트 정보에 대한 컨트롤 및 다이얼로그의 집합을 정의한다. 이러한 컨택트 정보는 저장 시스템에 아이템들로서 저장될 수 있다. "컨택트"는 일반적으로 임의의 사람, 그룹, 조직, 회사, 가족, 또는 다른 타입의 식별가능한 실체를 지칭한다. "컨택트 정보"는 컨택트에 대응하고, 컨택트를 식별하고 접촉하며 액세스하고 대응하거나 통신하기 위해 관련되는 것으로 간주될 수 있는 임의의 정보를 나타낸다. 컨택트 정보가 어플리케이션에 의해 이용되어, 예를 들면 이메일을 전송하고, 전화 호출을 개시하며, 웹 사이트에 액세스하고, 게임 세션을 개시하며, 재정 거래를 수행하는 등과 같이 원하는 기능을 수행한다. 컨택트 정보의 비제한적인 예는 이름, 별명, 전화번호, 이메일 주소, 집 주소, 인스턴스 메시징(IM) 어드레스 및 웹 주소를 포함한다. 컨택트 정보는 컨택트의 상태와 같은 다른 타입의 정보도 지칭할 수 있다. 예를 들면, 컨택트가 현재 온라인 상태이거나 전화 라인 상에 있다는 것을 나타내는 정보도 넓게는 컨택트 정보로서 간주될 수 있다.
컨택트 명칭 공간은 "System.Windows.Contacts", "System.Windows.Controls"(도 3의 컨트롤(310)), 또는 "System.Windows.Collaboration"과 같이 프리젠테이션 서브시스템 명칭 공간(200)의 일부가 될 수 있지만, 셀 명칭 공간(202)의 일부가 될 수 없다. 다르게는, 컨택트 명칭 공간은 셀 명칭 공간(202)의 일부가 될 수 있다. 컨택트 명칭 공간은 System.Windows 명칭 공간의 기능을 확장시키지만, 셀의 일부로서 구현될 필요는 없다(즉, System.Windows.Explorer 명칭 공간(302)의 일부일 필요는 없다).
컨택트 명칭 공간은 복수의 다른 어플리케이션들에 의해 액세스될 수 있는 사용자에 의해 한번 컨택트 정보가 입력되도록 허용한다. 그러므로, 사용자는 동일한 컨택트 정보를 복수회 입력하는 부담을 덜어준다(복수의 어플리케이션 각각에 대해 한번만).
컨택트 명칭 공간의 컨트롤 및 다이얼로그는 이하를 포함한다.
·사용자가 그 저장된 컨택트들로부터 하나의 컨택트를 선택하거나 가져올 수 있도록 하는데 이용되는 Contact Picker 다이얼로그. 예를 들면, 사용자들이 전자 메일 메시지가 전송될 컨택트, 또는 인스턴트 메시징에 대한 컨택트를 선택할 수 있게 한다. 사용자는 예를 들면 저장 시스템에 아이템으로서 저장된 사용자의 모든 컨택트 중에서 리스트를 통해 브라우징하고, 하나 이상의 컨택트를 선택할 수 있다. Contact Picker 다이얼로그는 발명의 명칭이 "Contact Picker"이고 2002년 12월 19일에 출원된 미국특허출원번호 제10/324,746호에 더 상세하게 설명되어 있고, 참고로 여기에 첨부하였다.
·사용자가 이름과 같은 컨택트 정보를 자유로운 형태로(즉, 이름을 타이핑하여) 입력할 수 있도록 하는데 이용되는 Contact Textbox 컨트롤. 컨택트 정보가 입력됨에 따라, 컨트롤은 정보를 사용자의 저장된 컨택트들로부터 하나 이상의 컨택트로 분해한다. 분해된 정보는 예를 들면 드롭-다운 메뉴로 표시될 수 있고, 사용자가 이름을 자유로운 형태로 입력하고 있었던 곳에 타이프-인(type-in) 라인으로 자동으로 입력될 수 있다.
·컨택트 정보를 사용자들에게 표시하는데 이용되는 Contact 컨트롤. 컨택트 정보의 편집 또는 자유 입력은 이러한 컨트롤에 의해 지원되지 않는다.
명칭 공간 멤버의 예
본 섹션은 명칭 공간 예(도 3의 프리젠테이션 서브시스템 명칭 공간(200)의 명칭 공간)에 의해 노출된 멤버의 예를 기술하는 복수의 테이블을 포함한다. 이들 노출된 멤버들은 예를 들면 클래스, 인터페이스, 에뉴머레이션(enumeration), 및 델리게이트를 포함할 수 있다. 이들 예들에 기술된 멤버들은 단지 예에 불과하고 다르게는 다른 멤버들이 명칭 공간에 의해 노출될 수 있다는 것은 자명하다.
이하의 명칭 공간 기술의 일부에서, 특정 클래스, 인터페이스, 에뉴머레이션(enumeration) 및 델리게이트의 기술이 공백으로 되어 있다. 이들 클래스, 인터페이스, 에뉴머레이션, 및 델리게이트의 더 완전한 설명은 상기 참조된 SDK를 저장한 컴팩트 디스크의 주제에서 발견될 수 있다.
System.Windowns.Explorer.Controls
이하의 표는 System.Windows.Explorer.Controls 명칭 공간에 의해 노출된 멤버들의 예들을 열거한다.
클래스
DefaultCommandEventArgs : DefaultCommandEvent 이벤트에 대한 이벤트 데이터를 포함한다.
ExploerView : 사용자가 폴더의 컨텐트에 관한 정보를 볼 수 있게 한다.
FolderSelectionChangedEventArgs : FolderSelectionChangedEvent 이벤트에 대한 이벤트 데이터를 포함한다.
IncludeItemEventArgs : IncludeItemEvent 이벤트에 대한 이벤트 데이터를 포함한다.
ItemVerbModifyEventArgs : ItemVerbModifyEventArgs 클래스의 새로운 인스턴스를 초기화한다.
NavigationCompleteEventArgs : NavigationCompleteEvent 이벤트에 대한 이벤트 데이터를 포함한다.
NavigationFailedEventArgs : NavigationFailedEvent 이벤트에 대한 이벤트 데이터를 포함한다.
NavigationPendingEventArgs : NavigationPendingEvent 이벤트에 대한 이벤트 데이터를 포함한다.
에뉴머레이션
FolderViewFlags : ExploerView에 대한 뷰 속성을 나타낸다.
FolderViewMode : ExplorerView에 대한 뷰 모드를 나타낸다.
델리게이트
DefaultCommandEventHandler : DefaultCommandEvent를 핸들링할 메소드를 나타낸다.
FolderSelectionChangeEventHandler : FolderSelectionChangeEvent를 핸들링할 메소드를 나타낸다.
IncludeItemEventHandler : IncludeItemEvent를 핸들링하는 메소드를 나타낸다.
ItemVerbModifyEventHandler : ItemVerbModifyEvent를 핸들링하는 메소드를 나타낸다.
NavigationCompleteEventHandler : NavigationCompleteEvent를 핸들링하는 메소드를 나타낸다.
NavigationFailedEventHandler : NavigationFailedEvent를 핸들링하는 메소드를 나타낸다.
NavigationPendingEventHandler : NavigationPendingEvent를 핸들링하는 메소드를 나타낸다.
System.Windows.Explorer.Dialogs
이하의 테이블은 System.Windows.Explorer.Dialog 명칭 공간에 의해 노출되는 멤버의 예들을 열거한다.
클래스
ColorDialog
CommonDialog
DialogControlItemSelectedEventArgs
FileDialog : OpenFileDialogSaveFileDialogBase의 부모 클래스로서 이용되는 추상적인 클래스.
FileDialogCheckButton : FileDialog 상에 놓여질 수 있는 체크 박스 컨트롤을 나타낸다.
FileDialogComboBox
FileDialogContainerControlBase : FileDialogComboBox, FileDialogOpenDropDown, FileDialogRadioButtonGroup, 및 FileDialogToolbarMenu의 부모 클래스로서 이용되는 추상적인 클래스.
FileDialogControlBase : FileDialogCheckButton, FileDialogEditBox, FileDialogPushButton,FileDialogContainerControlBase의 부모 클래스로서 이용되는 추상적인 클래스.
FileDialogControlItem
FileDialogEditBox : FileDialog 상에 놓여질 수 있는 텍스트 박스 컨트롤을 나타낸다.
FileDialogOpenDropDown
FileDialogPushButton : FileDialog 상에 놓여질 수 있는 버튼 컨트롤을 나타낸다.
FileDialogRadioButtonGroup
FileDialogToolbarMenu
FileOkEventArgs
FileType
OpenFileDialog : 사용자가 열 하나 이상의 파일을 열 수 있게 한다. 이 클래스는 계승될 수 없다.
SaveAsFileDialog : 사용자가 파일을 저장할 위치를 선택하고, 파일 명칭을 지정할 수 있게 한다. 이 클래스는 계승될 수 없다.
SaveFileDialog : 사용자가 파일을 저장할 위치를 선택할 수 있도록 한다. 이 클래스는 계승될 수 없다.
SaveFileDialogBase : SaveAsFileDialogSaveFileDialog의 부모 클래스로서 이용되는 추상적인 클래스.
에뉴머레이션(Enumeration)
FileDialogLayout
TileAttributes
델리게이트(Delegate)
DialogControlItemSelectedEventHandler
FileOkEventHandler
System.Windows.Desktop
이하의 테이블은 System.Windows.Desktop 명칭 공간에 의해 노출되는 멤버의 예들을 열거한다. 이러한 명칭 공간은 사이드바 및 통지에 관련된 요소를 포함한다.
클래스
AnalogClockPanel
Appbar
AreaButton
BaseComTile
BaseSidebarClockSettings
BaseTile : 관례적인 사이드바 타일 구현의 부모 클래스로서 이용되는 추상적인 클래스.
BasketControl
CalendarElement
CalendarImages
ChildrenWonFitArgs
ClockHacks
ClockPanel
DataSourceEventArgs : 데이터 소스로부터 패싱된 이벤트 데이터를 나타낸다.
DigitalDateTimeElement
DragButton
DragControlWindow
DraggableButton
DragWindow
DropArgs
DropEventArgs
ExtraSpaceArgs
FillAlphaPresenter
FillImageResourcePresenter
FillPanel
FillPresenter
Flyout
FlyoutLinkClickEventArgs : 사이드바 타일의 플라이아웃 뷰의 기저부에서 발견되는 선택적 링크로부터 발원되는 이벤트에 응답하여 RMAActionEventHandler에 패싱되는 이벤트 데이터를 나타낸다.
FlyoutPresenter
FlyoutStuff
FocusableButton
FocusWithinWorkaroundHelper
FolderContentsChangedEventArgs : 폴더 컨텐츠의 변경에 응답하여 FolderContentsChangedEventHandler에 패싱된 이벤트 데이터를 나타낸다.
GlobalSetting
HackBorder
HackImage
ImageButton
ImageResource
ImageResourcePresenter
ItemControl
ItemToolbarControl
ListMakerControl
MenuStuff
NativeResource
NativeResourceHelper
NativeResources
NativeResourceTypeConverter
NormalButton
Notification : 시스템이 사용자 인터페이스(UI)의 조각으로 사용자에게 전송하는 메시지 및 그 연관 데이터를 나타낸다.
NotificationArea
NotificationButton : 통지 상에 나타나는 버튼을 정의한다.
NotificationClickedEventArgs : 통지 윈도우에서 클릭 이벤트와 연관된 데이터를 포함한다.
NotificationContext : 어플리케이션이 현재 특정 상태에 있는지 여부를 선언한다. 이 상태는 사용자의 컨텍스트의 정의의 일부로서 이용된다.
NotificationTimerPresenter
NotifyCompleteEventArgs
NotifyWindow
OptionsButton
OuterTile
OverflowableCollection
OverflowableControlCollection
OverflowPanel
OverflowPresenter
OverflowWrapper
PanelInfo
ProgressInfo
QuickLaunchTile
RMAActionEventArgs : 리치(rich) 최소화된 어플리케이션(RMA)에 의해 생성된 이벤트 데이터를 나타낸다. RMAActionEventHandler에 의해 소비된다.
RMAData
SetDataArrayEventArgs : 데이터 어레이에 의해 생성되어 SetDataArrayEventHandler에 전송된 이벤트 데이터를 나타낸다.
Sidebar
SidebarAlarmClock
SidebarClock
SidebarClockSettings
SlideShowTile
StackAlphaPresenter
StackImageResourcePresenter
StartButton
SyncHelper
SyncItemBar
SyncTile
Taskbar
TaskChevron
TaskGroup
TaskItem
TaskList
TaskOverflow
TaskOverflowableControlCollection
TaskPresenter
TestTile
TestTimeZone
TextElementFontInfo
Theme
ThemeHelper
ThemeHelperOld
ThemeImage
ThemeImageTypeConverter
ThemeResources
Tile
TileCollection
TileOverflow
TileThumb
TileThumbDotNet
Timer
TimerStuff
TimeZone
ViewStatusControl
WebHostEventArgs
WindowOrigin
WindowOriginOld
WindowStuff
인터페이스
ICOMDataSourceHandler : 관리되지 않는 코드로 구현된 데이터 소스를 생성하고 통신하는데 이용된다.
IOverflow
IOverflowList
ISidebar : 개별적인 타일을 호스팅하는 사이드바로의 액세스를 제공한다. 사이드바 호스트는 플라이아웃을 열고 닫으며, 쇼트컷 메뉴를 표시하고, 개별적인 타일에 관련된 이벤트에 응답하는 것을 담당한다.
ISidebarAlarm
에뉴머레이션(Enumeration)
AlarmState
BasketFlags
DragWindowPos
InvokedFolderActionEnum : 사용자가 폴더에 대한 ItemControl을 유발할 때 해야 할 것을 결정하기 위한 에뉴머레이션. InvokedFolderActionItemControlInvokedFolderAction과 함께 이용됨.
RMAAction : 이벤트 액션을 정의하는 Action 속성과 함께 이용되는 상수.
SelectionModeEnum
델리게이트
ChildrenWontFitHandler
DocumentCompleteEventHandler
DropEventHandler
DropHandler
DummyDelegateToSetupAppDomainProperly
ExtraSpaceHandler
FlyoutClosingEventHandler
FlyoutLinkClickEventHandler : FlyoutLinkClickEvent 이벤트를 핸들링하는 메소드를 나타낸다.
FolderContentsChangedEventHandler
NavigateErrorEventHandler
NotificationClickedEventHandler : NotificationClickedEvent 이벤트를 핸들링하는 메소드를 나타낸다.
NotifyCompleteEventHandler : NotifyCompleteEvent 이벤트를 핸들링하는 메소드를 나타낸다.
RMAActionEventHandler : RMAActionEvent 이벤트를 핸들링하는 메소드를 나타낸다.
SetDataArrayEventHandler : SetDataArrayEvent 이벤트를 핸들링하는 메소드를 나타낸다.
System.Windows.Controls
셀 컴포넌트에 의해 이용되는 클래스 및 인터페이스를 제공한다.
이하의 표는 System.Windows.Controls 명칭 공간에 의해 노출된 멤버의 예들을 열거한다.
클래스
ContactControl
ContactPickerDialog
ContactPropertyRequest
ContactPropertyRequestCollection
ContactSelection
ContactSelectionCollection
ContactTextBox
ContactTextBoxSelectionChangedEventArgs
ContactTextBoxTextChangedEventArgs
ContactTextBoxTextResolvedEventArgs
IncludeContactEventArgs
IteratedEventArgs
Iterator
OKCancelApplyEventArgs
OKCancelApplyStrip
에뉴머레이션
ContactControlPropertyPosition
ContactPickerDialogLayout
ContactPropertyCategory
ContactPropertyType
ContactType
OKCancelApplyType
델리게이트
ContactTextBoxSelectionChangedEventHandler
ContactTextBoxTextChangedEventHandler
ContactTextBoxTextResolvedEventHandler
IncludeContactEventHandler
IteratedEventHandler
OKCancelApplyEventHandler
OpendedEventHandler
컴퓨팅 시스템 및 환경의 예
도 4는 프로그래밍 프레임워크(132)가 구현되는(완전히 또는 부분적으로) 적절한 컴퓨팅 환경(400)의 예를 예시하고 있다. 컴퓨팅 환경(400)은 본 명세서에 기재된 컴퓨터 및 네트워크 아키텍쳐에 활용될 수 있다.
예로 든 컴퓨팅 환경(400)은 단지 컴퓨팅 환경의 하나의 예에 불과하고 컴퓨터 및 네트워크 아키텍쳐의 이용이나 기능의 범주에 관해 어떠한 제한을 암시하려고 하는 것은 아니다. 컴퓨팅 환경(400)은 예로 든 컴퓨팅 환경(400)에 예시된 컴포넌트의 임의의 하나 또는 조합에 관련된 임의의 종속성이나 요구조건을 가지고 있는 것으로 해석되어서는 안된다.
프레임워크(132)는 수많은 다른 일반 목적 또는 특별 목적 컴퓨팅 시스템 환경 또는 구성으로 구현될 수 있다. 이용하기 적합한 주지의 컴퓨팅 시스템 환경 및/또는 구성의 예는 퍼스널 컴퓨터, 서버 컴퓨터, 멀티프로세서 시스템, 마이크로프로세서-기반 시스템, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 상기 시스템 또는 디바이스들 중 임의의 것을 포함하는 분산 컴퓨팅 환경, 등을 포함하고, 이들로 제한되지 않는다. 프레임워크의 컴팩트 또는 서브세트 버전은 셀룰러 전화, 개인 휴대 단말기, 핸드헬드 컴퓨터, 또는 다른 통신/컴퓨팅 디바이스와 같은 제한된 리소스의 클라이언트에서 구현될 수 있다.
프레임워크(132)는 하나 이상의 컴퓨터 또는 다른 디바이스들에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령의 일반적인 컨텍스트로 기술된다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하거나 특정 추상적인 데이터 타입을 구현하는 루틴, 프로그램, 오브젝트, 컴포넌트, 데이터 구조 등을 포함한다. 프레임워크(132)는 태스크들이 통신 네트워크를 통해 링크되는 원격 처리 디바이스에 의해 수행되는 분산 컴퓨팅 환경에서 실시될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 디바이스를 포함하는 로컬 및 원격 컴퓨터 저장 매체 모두에 위치한다.
컴퓨팅 환경(400)은 컴퓨터(402) 형태의 일반 목적 컴퓨팅 디바이스를 포함한다. 컴퓨터(402)의 컴포넌트는 하나 이상의 프로세서 또는 처리 유닛(404), 시스템 메모리(406), 및 프로세서(404)를 포함하는 다양한 시스템 컴포넌트를 시스템 메모리(406)에 결합시키는 시스템 버스(408)를 포함하고, 이들로 제한되지는 않는다.
시스템 버스(408)는 메모리 버스 또는 메모리 컨트롤러, 주변장치 버스, 가속 그래픽 포트, 및 다양한 버스 아키텍쳐들 중 임의의 것을 이용하는 프로세서 또는 로컬 버스를 포함하는 수개의 타입의 버스 구조 중 하나 이상을 나타낸다. 예를 들어, 그러한 아키텍쳐는 ISA 버스, MCA 버스, EISA 버스, VESA 로컬 버스, 메자닌(Mezzanine) 버스로도 알려진 PCI 버스를 포함할 수 있다.
컴퓨터(402)는 통상 다양한 컴퓨터 판독가능 매체를 포함한다. 그러한 매체는 컴퓨터(402)에 의해 액세스될 수 있는 임의의 가용한 매체가 될 수 있고, 휘발성 및 비휘발성 매체, 제거가능 및 제거 불가능 매체를 모두 포함한다.
시스템 메모리(406)는 랜덤 액세스 메모리(RAM, 410)와 같은 휘발성 메모리 및/또는 판독전용 메모리(ROM, 412)와 같은 비휘발성 메모리 형태의 컴퓨터 판독가능 매체를 포함한다. 기동 동안과 같이 컴퓨터(402) 내의 소자들간의 정보 전달을 도와주는 기본 루틴을 포함하는 기본 입출력 시스템(414, BIOS)은 통상 ROM(412)에 저장된다. RAM(410)은 통상 처리 유닛(404)에 즉시 액세스 가능하거나 이것에 의해 현재 동작되고 있는 데이터 및/또는 프로그램 모듈을 포함한다.
컴퓨터(402)는 다른 제거가능/제거불가능, 휘발성/비휘발성 컴퓨터 저장 매체를 포함할 수 있다. 예로서, 도 4는 제거불가능, 비휘발성 자기 매체(도시되지 않음)에 기록하거나 판독하는 하드 디스크 드라이브(416), 제거가능, 비휘발성 자기 디스크(420)에 기록하거나 판독하는 자기 디스크 드라이브(418), 및 CD-ROM, DVD-ROM, 또는 다른 광학 매체와 같은 제거가능, 비휘발성 광 디스크(424)에 기록하거나 판독하는 광 디스크 드라이브(422)를 예시한다.
하드 디스크 드라이브(416), 자기 디스크 드라이브(418) 및 광 디스크 드라이브(422)는 하나 이상의 데이터 매체 인터페이스(426)에 의해 시스템 버스(408)에 각각 접속된다. 다르게는, 하드 디스크 드라이브(416), 자기 디스크 드라이브(418) 및 광 디스크 드라이브(422)는 하나 이상의 인터페이스(도시되지 않음)에 의해 시스템 버스(408)에 접속될 수 있다.
디스크 드라이브 및 그 연관 컴퓨터 판독가능 매체는 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈 및 컴퓨터에 대한 다른 데이터의 비휘발성 저장을 제공한다. 상기 예는 하드 디스크(416), 제거가능한 자기 디스크(420), 및 제거가능한 광 디스크(424)를 예시하고 있지만, 자기 카세트 또는 다른 자기 저장 디바이스, 플래시 메모리 카드, CD-ROM, DVD 또는 다른 광 저장장치, RAM, ROM, EEPROM 등과 같이 컴퓨터에 의해 액세스될 수 있는 데이터를 저장할 수 있는 다른 타입의 컴퓨터 판독가능 매체가 예로 든 컴퓨팅 시스템 및 환경을 구현하는데 활용될 수 있다는 것은 자명하다.
예를 들어, 오퍼레이팅 시스템(426), 하나 이상의 어플리케이션 프로그램(428), 다른 프로그램 모듈(430) 및 프로그램 데이터(432)를 포함하여, 임의의 개수의 프로그램 모듈들이 하드 디스크(416), 자기 디스크(420), 광 디스크(424), ROM(412) 및/또는 RAM(410)에 저장될 수 있다.
사용자는 키보드(434) 및 포인팅 디바이스(436, 예를 들면 "마우스")와 같은 입력 디바이스를 통해 컴퓨터(402)에 명령과 정보를 입력한다. 다른 입력 디바이스(438, 구체적으로 도시되지 않음)는 마이크로폰, 조이스틱, 게임 패드, 위성 디시(dish), 직렬 포트, 스캐너 등을 포함할 수 있다. 이들 및 다른 입력 디바이스들은 시스템 버스(408)에 결합되는 입출력 인터페이스(440)를 통해 처리 유닛(404)에 접속되지만, 병렬 포트, 게임 포트 또는 범용 직렬 버스(USB)와 같은 다른 인터페이스 및 버스 구조에 의해 접속될 수도 있다.
모니터(442) 또는 다른 타입의 디스플레이 디바이스는 비디오 어댑터(444)와 같은 인터페이스를 통해 시스템 버스(408)에 접속될 수 있다. 모니터(4421)뿐만 아니라, 다른 출력 주변장치 디바이스는 입출력 인터페이스(440)를 통해 컴퓨터(402)에 접속될 수 있는 스피커(도시되지 않음) 및 프린터(446)와 같은 컴포넌트를 포함할 수 있다.
컴퓨터(402)는 원격 컴퓨팅 디바이스(448)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 이용하여 네트워킹된 환경에서 동작할 수 있다. 원격 컴퓨팅 디바이스(448)는 퍼스널 컴퓨터, 휴대용 컴퓨터, 서버, 라우터, 네트워크 컴퓨터, 피어 디바이스 또는 다른 공통 네트워크 노드 등이 될 수 있다. 원격 컴퓨팅 디바이스(448)는 컴퓨터(402)와 관련하여 상기 설명한 구성요소들 및 특징들 중 다수 또는 모두를 포함하는 휴대용 컴퓨터로서 예시된다.
컴퓨터(402)와 원격 컴퓨터(448)간의 논리적 접속은 로컬 영역 네트워크(LAN, 450) 및 일반적인 와이드 영역 네트워크(WAN, 452)로서 도시되어 있다. 그러한 네트워킹 환경은 사무실, 기업-와이드 컴퓨터 네트워크, 인트라넷 및 인터넷에서 흔한 것이다.
LAN 네트워킹 환경에서 구현되는 경우, 컴퓨터(402)는 네트워크 인터페이스 또는 어댑터(454)를 통해 로컬 네트워크(450)에 접속된다. WAN 네트워킹 환경에서 구현되는 경우, 컴퓨터(402)는 통상 와이드 네트워크(452)를 통해 통신을 확립하기 위한 모뎀(456) 또는 다른 수단을 포함한다. 컴퓨터(402)의 내부 또는 외부에 존재할 수 있는 모뎀(456)은 입출력 인터페이스(440) 또는 다른 적절한 메커니즘을 통해 시스템 버스(408)에 접속될 수 있다. 예시된 네트워크 접속은 단지 예로 든 것이며 컴퓨터(402, 448)간의 통신 링크(들)를 확립하는 다른 수단이 채용될 수 있다는 것은 자명하다.
컴퓨팅 환경(400)으로 예시되어 있는 것과 같은 네트워킹된 환경에서, 컴퓨터(402)와 관련하여 도시된 프로그램 모듈, 또는 그 일부는 원격 메모리 저장 디바이스에 저장될 수 있다. 예로서, 원격 어플리케이션 프로그램(458)은 원격 컴퓨터(448)의 메모리 디바이스 상에 상주한다. 예시를 위해, 어플리케이션 프로그램 및 오퍼레이팅 시스템과 같은 다른 실행가능한 프로그램 컴포넌트는 여기에서 이산 블록으로서 예시되어 있지만, 그러한 프로그램 및 컴포넌트들은 컴퓨팅 디바이스(402)의 다른 저장 컴포넌트내에 다양한 시간에 상주하고 컴퓨터의 데이터 프로세서(들)에 의해 실행된다는 점은 자명하다.
프레임워크(132), 및 특히 API(142) 또는 API(142)에 수행되는 호출의 구현은 일부 형태의 컴퓨터 판독가능 매체에 저장되고, 이들을 통해 송신될 수 있다. 컴퓨터 판독가능 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 가용한 매체일 수 있다. 예를 들면, 컴퓨터 판독가능 매체는 "컴퓨터 저장 매체" 및 "통신 매체"를 포함하고, 이들로 제한되지 않는다. "컴퓨터 저장 매체"는 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 정보 저장을 위한 임의의 방법이나 기술로 구현되는 휘발성 및 비휘발성, 제거가능 및 제거 불가능 매체를 모두 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, DVD 또는 다른 광학 디스크 저장장치, 자기 카세트, 자기 테이프, 자기 디스크 저장장치 또는 다른 자기 저장장치 디바이스, 또는 원하는 정보를 저장하는데 이용될 수 있고 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함하고, 이들로 제한되지는 않는다.
"통신 매체"는 통상 컴퓨터 판독가능한 명령, 데이터 구조, 프로그램 모듈 또는 다른 데이터를 반송파와 같은 변조된 데이터 신호 또는 다른 전송 메커니즘으로 실시한다. 통신 매체는 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호"라는 용어는 정보를 신호로 인코딩하는 것과 같은 방식으로 설정되거나 변경되는 하나 이상의 특징을 구비하는 신호를 의미한다. 예를 들면, 통신 매체는 유선 네트워크 또는 직접-유선 접속과 같은 유선 매체 및 음향, RF, 적외선, 및 다른 무선 매체와 같은 무선 매체를 포함하며, 이들로 제한되지는 않는다. 상기의 임의의 조합도 컴퓨터 판독가능한 매체의 범주내에 포함된다.
다르게는, 프레임워크의 일부는 하드웨어 또는 하드웨어, 소프트웨어 및/또는 펌웨어의 조합으로 구현될 수 있다. 예를 들면, 하나 이상의 어플리케이션 특정 집적 회로(ASIC) 또는 프로그램가능한 로직 디바이스(PLD)는 프레임워크의 하나 이상의 부분을 구현하도록 설계되거나 프로그래밍될 수 있다.
프로그래밍 인터페이스(또는 더 간단하게는 인터페이스)는 하나 이상의 코드 세그먼트(들)가 하나 이상의 다른 코드 세그먼트(들)에 의해 제공되는 기능과 통신하거나 액세스할 수 있도록 하기 위한 임의의 메커니즘, 프로세스, 프로토콜로서 볼 수 있다. 다르게는, 프로그래밍 인터페이스는 다른 컴포넌트(들)의 하나 이상의 메커니즘(들), 메소드(들), 함수 호출(들), 모듈(들), 등에 통신가능하게 결합할 수 있는 시스템의 컴포넌트의 하나 이상의 메커니즘(들), 메소드(들), 함수 호출(들), 모듈(들), 오브젝트(들), 등으로 간주될 수 있다. 상기 문장에서의 용어 "코드 세그먼트"는 코드의 하나 이상의 명령 또는 라인을 포함하려는 것이고, 코드 세그먼트가 분리되어 컴파일되는지 여부, 코드 세그먼트가 소스, 중간, 또는 오브젝트 코트로서 제공되는지 여부, 코드 세그먼트가 런타임 시스템 또는 프로세스에서 활용되는지 여부, 또는 이들이 동일하거나 다른 머신에 위치하거나 또는 복수의 머신에 걸쳐 분산되어 있는지 여부, 또는 코드 세그먼트에 의해 나타낸 기능이 전체적으로 소프트웨어로, 전체적으로 하드웨어로, 또는 하드웨어 및 소프트웨어의 조합으로 구현되어 있는지 여부에 관계없이, 예를 들면 코드 모듈, 오브젝트, 서브루틴, 함수 등을 포함한다.
개념적으로는, 프로그래밍 인터페이스는 도 5 또는 도 6에 도시된 바와 같이 일반적으로 보여질 수 있다. 도 5는 제1 및 제2 코드 세그먼트가 통신하는 관로(conduit)로서의 인터페이스 Interface1을 예시하고 있다. 도 6은 시스템의 제1 및 제2 코드 세그먼트가 매체 M을 통해 통신할 수 있도록 하는 인터페이스 오브젝트(I1 및 I2, 제1 및 제2 코드 세그먼트의 일부일수도 그렇지 않을 수도 있다)를 포함하는 인터페이스를 예시하고 있다. 도 6을 보면, 인터페이스 오브젝트(I1, I2)를 동일한 시스템의 분리된 인터페이스로서 생각할 수 있고, 오브젝트(I1, I2)와 매체 M이 인터페이스를 구성하는 것으로 생각할 수 있다. 도 5 및 6은 플로우의 각 측면 상에서의 양방향 플로우 및 인터페이스를 도시하고 있지만, 일부 실시예들은 하나의 방향으로만 정보 플로우를 가질 수 있고(또는 아래에 설명되는 바와 같이 정보 플로우를 가지지 않을 수도 있다), 한쪽에만 인터페이스 오브젝트를 가질 수도 있다. 예를 들면, 어플리케이션 프로그래밍 또는 프로그램 인터페이스(API), 엔트리 포인트, 메소드, 함수, 서브루틴, 원격 절차 호출, 및 컴포넌트 오브젝트 모델(COM) 인터페이스와 같은 용어들은 프로그래밍 인터페이스의 정의내에 포함되고, 이들로 제한되지 않는다.
그러한 프로그래밍 인터페이스의 양태들은 제1 코드 세그먼트가 제2 코드 센그먼트에 정보(여기에서, "정보는 가장 넓은 의미로 이용되고, 데이터, 명령, 요구 등을 포함한다)를 송신하는 메소드, 제2 코드 세그먼트가 정보를 수신하는 메소드, 및 정보의 구조, 시퀀스, 구문(Syntax), 구성, 스키마, 타이밍 및 컨텐트를 포함할 수 있다. 이러한 측면에서, 정보가 인터페이스에 의해 정의된 방식으로 전송되는 한, 기저 트랜스포트 매체 자체는 매체가 유선 또는 무선, 또는 이 둘의 조합인지 여부가 인터페이스의 동작에 중요하지는 않다. 일부 상황에서, 정보 전달이 다른 메커니즘을 통하거나(예를 들면, 코드 세그먼트간의 정보 플로우에서 분리된 버퍼, 파일 등에 놓여진 정보) 존재하지 않고, 하나의 코드 세그먼트가 단순히 제2 코드 세그먼트에 의해 수행된 기능에 액세스하는 경우와 같이, 정보가 종래의 의미에서 하나 또는 양방향으로 패싱되지 않을 수도 있다. 이들 양태들의 임의의 하나 또는 모두는 주어진 상황, 예를 들면 약하게 결합되거나 강하게 결합된 구성에서 코드 시스템이 시스템의 일부인지 여부에 따라, 중요할 수 있고, 따라서 이러한 리스트는 예시적이고 비제한적인 것으로 간주되어야 한다.
이러한 프로그래밍 인터페이스의 개념은 본 기술분야의 숙련자들에게는 주지되어 있고, 본 발명의 상기 상세한 설명으로부터 명백하다. 그러나, 프로그래밍 인터페이스를 구현하는 다른 방법들이 존재하고, 특별히 제외하지 않는다면, 이들도 또한 본 명세서의 끝부분에 제시된 특허청구범위에 든다고 할 것이다. 그러한 다른 방법들은 도 5 및 도 6의 단순한 모습보다 더 정교하고 복잡하게 보일 수 있지만, 그럼에도 불구하고 이들은 동일한 전체 결과를 달성하는 유사한 기능을 수행한다. 이제, 프로그래밍 인터페이스의 다른 구현예들을 간단하게 설명한다.
A. 요소화(Factoring)
하나의 코드 세그먼트에서 다른 하나로의 통신은 통신을 복수의 이산 통신들로 분리함으로써 간접적으로 달성될 수 있다. 이것은 도 7 및 8에 개략적으로 도시되어 있다. 도시된 바와 같이, 일부 인터페이스들은 분리가능한 기능 세트의 측면에서 기술될 수 있다. 그러므로, 도 5 및 6의 인터페이스 기능은 수학적으로 24, 또는 2배 2배 3배 2를 제공하는 것처럼 동일한 결과를 얻도록 요소화될 수 있다. 따라서, 도 7에 도시된 바와 같이, 인터페이스 Interface1에 의해 제공되는 함수는 인터페이스의 통신을 복수의 인터페이스 Interface1A, Interface1B, Interface1C 등으로 변환하도록 서브분할되면서도, 동일한 결과를 달성한다. 도 8에 예시된 바와 같이, 인터페이스 I1에 의해 제공되는 함수는 복수의 인터페이스 I1a, I1b, I1c, 등으로 서브분할되면서도, 동일한 결과를 달성한다. 마찬가지로, 제1 코드 세그먼트로부터 정보를 수신하는 제2 코드 세그먼트의 인터페이스 I2도 복수의 인터페이스 I2a, I2b, I2c, 등으로 요소화된다. 요소화를 수행할 때, 제1 코드 세그먼트와 함께 포함되는 인터페이스의 개수는 제2 코드 세그먼트와 포함되는 인터페이스의 개수와 매칭될 필요는 없다. 도 7 및 도 8의 어느 하나의 경우에, 인터페이스 Interface1 및 I1의 기능적 사상(spirit)은 도 5 및 도 6과 각각 동일하게 유지된다. 인터페이스의 요소화는 연관적이고 상호적이며 다른 수학적 속성을 따름으로써, 요소화를 인식하기가 어렵다. 예를 들면, 오퍼레이션의 순서화는 중요하지 않으며, 결과적으로 인터페이스에 의해 실행되는 함수는 다른 코드 또는 인터페이스 일부에 의해, 인터페이스에 도달하기에 앞서서 잘 수행되거나, 시스템의 분리된 컴포넌트에 의해 수행될 수 있다. 더구나, 프로그래밍 분야에서 통상의 기술자라면, 동일한 결과를 달성하는 다른 함수를 호출하는 다양한 방식이 있다는 것을 잘 알고 있을 것이다.
B. 재정의(Redefinition)
일부 경우에, 의도된 결과를 달성하면서도 프로그래밍 인터페이스의 일부 양태(예를 들면, 파라미터)를 무시하고, 부가하거나 재정의할 수 있다. 이것은 도 9 및 도 10에 예시되어 있다. 예를 들면, 도 5의 인터페이스 Interface1이 함수 호출 Square(input, precision, output), 및 3개의 파라미터 input, precision and output을 포함하고 제1 코드 세그먼트로부터 제2 코드 세그먼트에 발행되는 호출을 포함한다고 가정하자. 도 9에 도시된 바와 같이, 중간 파라미터 precision이 주어진 시나리오에서 중요하지 않은 경우, 단지 무시되거나 심지어 meaningless(이 상황에서는) 파라미터로 대체될 수 있다. 중요하지 않는 additional 파라미터를 추가할 수도 있다. 어느 경우든, 입력이 제2 코드 세그먼트에 의해 제곱된 후 출력이 리턴되는 한, 제곱의 기능은 달성될 수 있다. Precision은 컴퓨팅 시스템의 일부 다운스트림 또는 다른 부분에 매우 의미있는 파라미터가 될 수 있다. 그러나, 일단 precision이 제곱을 계산하는 좁은 목적을 위해 필요하지 않는 것으로 인식되면, 대체되거나 무시될 수 있다. 예를 들면, 유효한 precision 값을 패싱하는 대신에, 생일과 같은 의미없는 값이 결과에 역영향을 미치지 않고 패싱될 수 있다. 마찬가지로, 도 10에 도시된 바와 같이, 인터페이스 I1이 인터페이스 I1'로 대체되어, 파라미터를 무시하거나 인터페이스에 부가하도록 재정의된다. 인터페이스 I2도 마찬가지로 인터페이스 I2'로 재정의되어, 불필요한 파라미터, 또는 다른 곳에서 처리된 파라미터를 무시하도록 재정의된다. 여기에서 중요한 것은, 일부 경우에 프로그래밍 인터페이스는 일부 목적에 대해 필요하지 않는 파라미터와 같은 양태들을 포함하여, 이들이 무시되거나 재정의되고 또는 다른 목적을 위해 다른 곳에서 처리될 수 있다는 점이다.
C. 인라인 코딩
2개의 분리된 코드 모듈간의 "인터페이스"가 형태를 변경하도록 이들 2개의 분리된 코드 모듈의 기능의 일부 또는 모두를 융합하는 것이 가능하다. 예를 들면, 도 5 및 도 6의 기능은 각각 도 11 및 도 12의 기능으로 변환될 수 있다. 도 11에서, 도 5의 이전 제1 및 제2 코드 세그먼트는 이들 모두를 포함하는 모듈로 융합된다. 이 경우에, 코드 세그먼트는 여전히 서로 통신하고 있지만, 인터페이스는 단일 모듈에 더 적합한 형태로 적응될 수 있다. 그러므로, 예를 들면, 공식적인 호출 및 리턴 스테이트먼트는 더 이상 필요하지 않을 수도 있지만, 인터페이스 Interface1에 따른 유사한 처리 또는 응답(들)은 여전히 유효할 수 있다. 마찬가지로, 도 12에 도시된 바와 같이, 도 6으로부터의 인터페이스 I2의 일부(또는 모두)는 인터페이스 I1에 인라인으로 기록되어 인터페이스 I1을 형성한다. 예시된 바와 같이, 인터페이스 I2는 I2a 및 I2b로 분할되고, 인터페이스 부(I2a)는 인터페이스 I1과 인라인으로 코딩되어 인터페이스 I1을 형성한다. 구체적인 예를 위해, 도 6으로부터의 인터페이스 I1이 인터페이스 I2에 의해 수신된 함수 호출 제곱(input, output)을 수행하는 것을 고려하자. 여기에서, 제2 코드 세그먼트에 의해 input으로 처리된(이를 제곱함) 값을 처리한 후, output으로 제곱된 결과를 되돌려준다. 그러한 경우에, 제2 코드 세그먼트에 의해 수행된 처리(input을 제곱함)는 인터페이스로의 호출없이 제1 코드 세그먼트에 의해 수행될 수 있다.
D. 분리(Divorce)
하나의 코드 세그먼트로부터 다른 하나로의 통신은 통신을 복수의 이산 통신으로 분열시킴으로써 간접적으로 달성될 수 있다. 이것은 도 13 및 도 14에 개략적으로 도시된다. 도 13에 도시된 바와 같이, 하나 이상의 미들웨어(분리 인터페이스, 이들은 원래 인터페이스로부터 기능 및/또는 인터페이스 기능들을 분리시킨다)가 제공되어, 제1 인터페이스 Interface1 상의 통신을 다른 인터페이스, 이 경우에 인터페이스 Interface2A, Interface2B, 및 Interface2C에 일치하도록 변환시킨다. 이것은 예를 들면, Interface1 프로토콜에 따른 말하자면, 오퍼레이팅 시스템과 통신하도록 설계된 어플리케이션의 설치된 베이스가 있지만 오퍼레이팅 시스템이 변경되어 다른 인터페이스, 이 경우에 인터페이스 Interface2A, Interface2B 및 Interface2C를 이용하는 경우에, 수행될 수 있다. 요점은, 제2 코드 세그먼트에 의해 이용된 원래 인터페이스가 변경되어 더 이상 제1 코드 세그먼트에 의해 이용된 인터페이스와 양립할 수 없고 따라서 중개자가 이전 및 새로운 인터페이스를 양립하게 하는데 이용된다는 점이다. 마찬가지로, 도 14에 도시된 바와 같이, 제3 코드 세그먼트가 분리 인터페이스 DI1로 도입되어 인터페이스 I1로부터 통신을 수신하고 분리 인터페이스 DI2로 도입되어 인터페이스 기능을 예를 들면 DI2와 동작하도록 재설계된 인터페이스 I2a 및 I2b에 송신하지만, 동일한 기능적 결과를 제공한다. 마찬가지로, DI1 및 DI2가 함께 작용하여 도 6의 인터페이스 I1 및 I2의 기능을 새로운 오퍼레이팅 시스템으로 변환시키면서도, 동일하거나 유사한 기능적 결과를 제공한다.
E. 재저작(Rewriting)
또 다른 가능한 변동은 코드를 다이나믹하게 재저작하여 인터페이스 기능을 다른 것으로 대체하지만 동일한 전체 결과를 얻는 것이다. 예를 들면, 중간 언어(예를 들면, 마이크로소프트 IL, 자바 바이트코드, 등)로 제공되는 코드 세그먼트가 실행 환경(예를 들면, .Net 프레임워크, 자바 런타임 환경, 또는 다른 유사한 런타임 타입 환경에 의해 제공되는 것)에서 저스트-인-타임(JIT) 컴파일러 또는 해석기에 제공되는 시스템이 있을 수 있다. JIT 컴파일러는 통신을 제1 코드 세그먼트에서 제2 코드 세그먼트로 다이나믹하게 변환하도록, 즉 이들을 제2 코드 세그먼트에 의해 요구되는 다른 인터페이스(원래 또는 다른 제2 코드 세그먼트 중 하나)에 부합하도록 저작될 수 있다. 이것은 도 15 및 도 16에 도시되어 있다. 도 15에 도시되어 있는 바와 같이, 이러한 접근법은 상기 설명한 분리 시나리오와 유사하다. 이것은 예를 들면, 어플리케이션의 설치된 베이스가 Interface1 프로토콜에 따라 오퍼레이팅 시스템과 통신하도록 설계되지만, 그리고나서 오퍼레이팅 시스템이 다른 인터페이스를 이용하도록 변경되는 경우에 수행될 수 있다. JIT 컴파일러는 진행 중인 통신을 설치된-베이스 어플리케이션에서 오퍼레이팅 시스템의 새로운 인터페이스로 일치시키는데 이용될 수 있다. 도 16에 도시된 바와 같이, 인터페이스를 다이나믹하게 재저작하는 이러한 접근법은 다이나믹하게 인터페이스를 요소화하거나 또는 인터페이스를 변경하는데 이용될 수 있다.
또한, 유의할 점은, 다른 실시예들을 통해 인터페이스와 동일하거나 유사한 결과를 달성하기 위한 상기 설명된 시나리오들은 다양한 방식으로 조합되거나, 다른 개입 코드와 직렬 및/또는 병렬로 조합될 수 있다는 점이다. 그러므로, 상기 제공된 다른 실시예들은 서로 배타적인 것이 아니며, 혼합, 매칭 및 조합되어 도 5 및 도 6에 제공된 일반적인 시나리오에 동일하거나 등가인 시나리오를 생성한다. 또한, 유의할 점은, 대부분의 프로그래밍 구성에 있어서와 같이, 여기에 설명되지 않은 인터페이스의 동일하거나 유사한 기능을 달성하는 다른 유사한 방식들이 있지만, 그럼에도 불구하고 본 발명의 사상 및 범주에 의해 표현된다는 점이고, 즉, 유의할 점은 그것이 적어도 부분적으로는 인터페이스의 값의 기초가 되는 인터페이스에 의해 나타내어지는 기능, 및 이들에 의해 인에이블되는 양호한 결과들이라는 점이다.
결론
본 발명이 구조적 특징 및/또는 방법 액트에 특정한 언어로 설명되었지만, 첨부된 특허청구범위에 정의된 발명이 반드시 기재된 특정 특징이나 액트로 제한되는 것이 아니라는 것은 자명하다. 오히려, 구체적인 특징 및 액트들은 청구된 발명을 구현하는 형태의 예로서 개시되어 있다.
본 발명은 재사용가능한 사용자 인터페이스 컨트롤에 관련된 제1 서비스 그룹, 사용자 인터페이스 다이얼로그 및 사용자 인터페이스 마법사에 관련된 제2 서비스 그룹, 사용자 인터페이스 기능을 확장하는 것에 관련된 제3 서비스 그룹, 및 사용자 인터페이스의 데스크 탑의 기능을 확장하는 것에 관련된 제4 서비스 그룹 중 하나 이상을 포함하는 프로그래밍 인터페이스를 제공한다.
도 1은 클라이언트가 종래 프로토콜을 이용하여 인터넷을 통해 웹 서비스에 액세스하는 네트워크 아키텍쳐를 예시한 도.
도 2는 어플리케이션 프로그램 인터페이스(API)를 포함하는 네트워크 플랫폼에 대한 소프트웨어 아키텍쳐의 블록도.
도 3은 다양한 API 함수의 함수 클래스뿐만 아니라, API에 의해 지원되는 고유 명칭공간의 블록도.
도 4는 소프트웨어 아키텍쳐의 모두 또는 일부를 실행하는 예로 든 컴퓨터의 블록도.
도 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 및 16은 프로그래밍 인터페이스의 다양한 구현 예를 예시한 도.
<도면의 주요 부호에 대한 간단한 설명>
130 : 언어
140 : 공통 언어 스펙
142 : API
200 : 프리젠테이션 서브시스템
202 : 셀
204 : 웹 서비스
206 : 파일 시스템
144 : 공통 언어 런타임
146(1) : 오퍼레이팅 시스템
146(2) : 오브젝트 모델 서비스
220 : 프로그래밍 툴

Claims (42)

  1. 하나 이상의 컴퓨터 판독가능 매체에 실시되는 프로그래밍 인터페이스에 있어서,
    재사용가능한 사용자 인터페이스 컨트롤에 관련된 제1 서비스 그룹;
    사용자 인터페이스 다이얼로그 및 사용자 인터페이스 마법사에 관련된 제2 서비스 그룹;
    사용자 인터페이스 기능을 확장하는 것에 관련된 제3 서비스 그룹; 및
    사용자 인터페이스의 데스크탑의 기능을 확장하는 것에 관련된 제4 서비스 그룹
    을 포함하는 프로그래밍 인터페이스.
  2. 제1항에 있어서, 상기 제1 서비스 그룹은,
    저장 사용자 체험을 인캡슐레이션하는 제1 컨트롤;
    아이템이 어플리케이션-정의 방식으로 표시될수 있도록 하는 제2 컨트롤;
    아이템이 데스크탑의 사이드바에 추가될수 있도록 하는 제3 컨트롤;
    아이템에 리스트에 추가될수 있도록 하는 제4 컨트롤; 및
    아이템의 미리보기 이미지가 표시될수 있도록 하는 제5 컨트롤
    을 포함하는 프로그래밍 인터페이스.
  3. 제1항에 있어서, 상기 제2 서비스 그룹은,
    파일 및 폴더가 열리고 저장될수 있도록 하는 제1 다이얼로그;
    광 디스크가 기록될 수 있도록 하는 제1 마법사; 및
    전자 메일에 의해 이미지를 전송하는 것을 용이하게 하는 제2 마법사
    를 포함하는 프로그래밍 인터페이스.
  4. 제1항에 있어서, 상기 제3 서비스 그룹은,
    컨텍스트 메뉴로의 추가를 허용하는 제1 기능;
    어플리케이션-정의된 썸네일의 식별을 허용하는 제2 기능; 및
    하나 이상의 파일 또는 폴더에 관한 정보를 표시할 때 계산이 수행될수 있도록 하는 제3 기능
    을 포함하는 프로그래밍 인터페이스.
  5. 제1항에 있어서, 상기 제4 서비스 그룹은,
    사이드바가 데스크탑 상에 표시될수 있도록 하는 제1 기능; 및
    어플리케이션-정의된 통지가 데스크 탑 상에 표시될수 있도록 하는 제2 기능
    을 포함하는 프로그래밍 인터페이스.
  6. 시스템에 있어서,
    사용자 인터페이스의 재사용가능한 컨트롤을 가능하게 하는 제1 함수 세트를 노출시키기 위한 수단;
    상기 사용자 인터페이스의 재사용가능한 다이얼로그 및 상기 사용자 인터페이스의 재사용가능한 마법사를 가능하게 하는 제2 함수 세트를 노출시키기 위한 수단; 및
    상기 사용자 인터페이스의 데스크탑의 기능 확장을 가능하게 하는 제3 함수 세트를 노출시키기 위한 수단
    을 포함하는 시스템.
  7. 제6항에 있어서, 상기 사용자 인터페이스의 기능 확장을 가능하게 하는 제4 함수 세트를 노출시키기 위한 수단을 더 포함하는 시스템.
  8. 제7항에 있어서, 상기 제4 함수 세트를 노출시키기 위한 수단은,
    컨텍스트 메뉴로의 추가를 허용하는 하나 이상의 함수를 노출시키기 위한 수단;
    어플리케이션 정의된 썸네일의 식별을 허용하는 하나 이상의 함수를 노출시키기 위한 수단; 및
    하나 이상의 파일 또는 폴더에 관한 정보를 표시할 때 계산이 수행될 수 있도록 하는 하나 이상의 함수를 노출시키기 위한 수단
    을 포함하는 시스템.
  9. 제6항에 있어서, 상기 제1 함수 세트를 노출시키기 위한 수단은,
    저장 사용자 체험을 인캡슐레이션하는 하나 이상의 함수를 노출시키기 위한 수단;
    아이템이 어플리케이션 정의된 방식으로 표시될수 있도록 하는 하나 이상의 함수를 노출시키기 위한 수단;
    아이템이 데스크탑의 사이드바에 추가될수 있도록 하는 하나 이상의 함수를 노출시키기 위한 수단;
    아이템이 리스트에 추가될 수 있도록 하는 하나 이상의 함수를 노출시키기 위한 수단; 및
    아이템의 미리보기 이미지가 표시될 수 있도록 하는 하나 이상의 함수를 노출시키기 위한 수단
    을 포함하는 시스템.
  10. 제6항에 있어서, 상기 제2 함수 세트를 노출시키기 위한 수단은,
    파일 및 폴더가 열리고 저장될 수 있도록 하는 하나 이상의 함수를 노출시키기 위한 수단;
    광 디스크가 기록될 수 있도록 하는 하나 이상의 함수를 노출시키기 위한 수단; 및
    전자 메일에 의해 전송되는 이미지가 크기 조정될 수 있도록 하는 하나 이상의 함수를 노출시키기 위한 수단
    을 포함하는 시스템.
  11. 제6항에 있어서, 상기 제3 함수 세트를 노출시키기 위한 수단은,
    사이드바가 데스크탑 상에 표시될 수 있도록 하는 하나 이상의 함수를 노출시키기 위한 수단; 및
    어플리케이션 정의된 통지가 데스크 탑 상에 표시될 수 있도록 하는 하나 이상의 함수를 노출시키기 위한 수단
    을 포함하는 시스템.
  12. 사용자 인터페이스에 대한 타입 세트를 계층적 명칭공간으로 조직화하는 방법에 있어서,
    상기 타입 세트로부터 복수의 그룹을 생성하는 단계 - 상기 각 그룹은 논리적으로 관련된 기능을 노출하는 적어도 하나의 타입을 포함함 -;
    이름을 복수의 각 그룹에 할당하는 단계 - 복수의 그룹 중 하나는 재사용가능한 사용자 인터페이스 컨트롤에 관련된 기능을 포함하고, 복수의 그룹 중 다른 하나는 재사용가능한 사용자 인터페이스 다이얼로그 및 재사용가능한 사용자 인터페이스 마법사에 관련된 기능을 포함함 -; 및
    각 그룹의 타입이 상기 타입을 포함하는 그룹의 이름에 프리픽스된 선택된 상부 레벨 식별자를 포함하는 계층적 명칭에 의해 참조될수 있도록, 상부 레벨 식별자를 선택하고 각 그룹의 명칭을 상부 레벨 식별자로 프리픽싱하는 단계
    를 포함하는 방법.
  13. 제12항에 있어서, 상기 복수의 그룹들 중 또 다른 하나는 사용자 인터페이스를 확장하는 것에 관련된 기능을 포함하는 방법.
  14. 제13항에 있어서, 상기 사용자 인터페이스 기능을 확장하는 것에 관련된 기능은,
    컨텍스트 메뉴로의 추가를 허용하는 제1 기능;
    썸네일의 어플리케이션-식별을 허용하는 제2 기능; 및
    하나 이상의 파일 또는 폴더에 관한 정보를 표시할 때 계산이 수행될 수 있도록 하는 제3 기능
    을 포함하는 방법.
  15. 제13항에 있어서, 상기 할당하는 단계는 사용자 인터페이스 기능을 확장하는 것에 관련된 기능을 포함하는 그룹에 대한 계층적 명칭이 System.Windows.Explorer.Addin이 될수 있도록, Addin의 명칭을 사용자 인터페이스 기능을 확장하는 것에 관련된 기능을 포함하는 그룹에 할당하는 단계를 포함하는 방법.
  16. 제12항에 있어서, 상기 복수의 그룹들 중 또 다른 하나는 사용자 인터페이스 데스크 탑의 기능을 확장하는 것에 관련된 기능을 포함하는 방법.
  17. 제16항에 있어서, 상기 사용자 인터페이스 데스크탑의 기능을 확장하는 것에 관련된 기능은,
    사이드바가 상기 데스크탑 상에 표시될 수 있도록 하는 제1 기능; 및
    어플리케이션-정의된 통지가 데스크 탑 상에서 표시될 수 있도록 하는 제2 기능
    을 포함하는 방법.
  18. 제16항에 있어서, 상기 할당 단계는 사용자 인터페이스 데스크탑의 기능을 확장하는 것에 관련된 기능을 포함하는 그룹에 대한 계층적 명칭이 System.Windows.Explorer.Desktop이 되도록, Desktop의 명칭을 사용자 인터페이스 데스크탑의 기능을 확장하는 것에 관련된 기능을 포함하는 그룹에 할당하는 단계를 포함하는 방법.
  19. 제12항에 있어서, 상기 할당 단계는 사용자 인터페이스 컨트롤에 관련된 기능을 포함하는 그룹에 대한 계층적 명칭이 System.Windows.Explorer.Controls가 되도록, Control의 명칭을 사용자 인터페이스 컨트롤에 관련된 기능을 포함하는 그룹에 할당하고, 재사용가능한 사용자 인터페이스 다이얼로그 및 재사용가능한 사용자 인터페이스 마법사에 관련된 기능을 포함하는 그룹의 계층적 명칭이 System.Windows.Explorer.Dialogs가 되도록, Dialog의 명칭을 재사용가능한 사용자 인터페이스 다이얼로그 및 재사용가능한 사용자 인터페이스 마법사에 관련된 기능을 포함하는 그룹에 할당하는 단계를 포함하는 방법.
  20. 제12항에 있어서, 상기 재사용가능한 사용자 인터페이스 컨트롤에 관련된 기능은,
    저장 사용자 체험을 인캡슐레이션하는 제1 컨트롤;
    아이템이 어플리케이션-정의 방식으로 표시될수 있도록 하는 제2 컨트롤;
    아이템에 리스트에 추가될수 있도록 하는 제3 컨트롤; 및
    아이템의 미리보기 이미지가 표시될수 있도록 하는 제4 컨트롤
    을 포함하는 방법.
  21. 제12항에 있어서, 상기 재사용가능한 사용자 인터페이스 다이얼로그 및 상기 재사용가능한 사용자 인터페이스 마법사에 관련된 기능은,
    파일 및 폴더가 열리고 저장될수 있도록 하는 제1 다이얼로그;
    광 디스크가 기록될 수 있도록 하는 제1 마법사; 및
    전자 메일에 의해 이미지를 전송하는 것을 용이하게 하는 제2 마법사
    를 포함하는 방법.
  22. 사용자 인터페이스의 기능 확장을 가능하게 하는 함수로 제1 명칭 공간을 생성하는 단계; 및
    상기 사용자 인터페이스의 데스크탑의 기능 확장을 가능하게 하는 함수로 제2 명칭 공간을 생성하는 단계
    를 포함하는 방법.
  23. 제22항에 있어서, 재사용가능한 사용자 인터페이스 컨트롤을 가능하게 하는 함수로 제3 명칭 공간을 생성하는 단계를 더 포함하는 방법.
  24. 제23항에 있어서, 상기 제3 명칭공간은,
    저장 사용자 체험을 인캡슐레이션하는 제1 컨트롤;
    아이템이 어플리케이션-정의 방식으로 표시될수 있도록 하는 제2 컨트롤;
    아이템이 데스크탑의 사이드바에 추가될수 있도록 하는 제3 컨트롤;
    아이템에 리스트에 추가될수 있도록 하는 제4 컨트롤; 및
    아이템의 미리보기 이미지가 표시될수 있도록 하는 제5 컨트롤
    을 포함하는 방법.
  25. 제22항에 있어서, 사용자 인터페이스 다이얼로그 및 사용자 인터페이스 마법사를 가능하게 하는 함수로 제3 명칭공간을 생성하는 단계를 더 포함하는 방법.
  26. 제25항에 있어서, 상기 제3 명칭공간은,
    파일 및 폴더가 열리고 저장될수 있도록 하는 제1 다이얼로그;
    광 디스크가 기록될 수 있도록 하는 제1 마법사; 및
    전자 메일에 의해 이미지를 전송하는 것을 용이하게 하는 제2 마법사
    를 포함하는 방법.
  27. 제22항에 있어서, 상기 제1 명칭공간은,
    컨텍스트 메뉴로의 추가를 허용하는 제1 기능;
    어플리케이션-정의된 썸네일의 식별을 허용하는 제2 기능; 및
    하나 이상의 파일 또는 폴더에 관한 정보를 표시할 때 계산이 수행될 수 있도록 하는 제3 기능
    을 포함하는 방법.
  28. 제22항에 있어서, 상기 제2 명칭공간은,
    사이드바가 상기 데스크탑 상에 표시될 수 있도록 하는 제1 기능; 및
    어플리케이션-정의된 통지가 데스크 탑 상에서 표시될 수 있도록 하는 제2 기능
    을 포함하는 방법.
  29. 사용자 인터페이스의 컨트롤을 이용하는 하나 이상의 제1 함수를 호출하는 단계; 및
    사용자 인터페이스의 기능을 확장하는 하나 이상의 제2 함수를 호출하는 단계
    를 포함하는 방법.
  30. 제29항에 있어서, 상기 사용자 인터페이스의 데스크 탑의 기능을 확장하는 하나 이상의 제3 기능을 호출하는 단계를 더 포함하는 방법.
  31. 제30항에 있어서, 상기 데스크 탑의 기능을 확장하는 함수는,
    사이드바가 상기 데스크탑 상에 표시될 수 있도록 하는 하나 이상의 함수; 및
    어플리케이션-정의된 통지가 데스크 탑 상에서 표시될 수 있도록 하는 하나 이상의 함수
    를 포함하는 방법.
  32. 제29항에 있어서, 상기 사용자 인터페이스의 다이얼로그 및 마법사를 이용하는 하나 이상의 제3 함수를 호출하는 단계를 더 포함하는 방법.
  33. 제32항에 있어서, 상기 사용자 인터페이스의 다이얼로그 및 마법사를 이용하는 함수는,
    파일 및 폴더가 열리고 저장될수 있도록 하는 다이얼로그를 이용하는 하나 이상의 함수;
    광 디스크가 기록될 수 있도록 하는 마법사를 이용하는 하나 이상의 함수; 및
    전자 메일에 의해 이미지를 전송하는 것을 용이하게 하는 또 다른 마법사를 이용하는 하나 이상의 함수
    를 포함하는 방법.
  34. 제29항에 있어서, 상기 사용자 인터페이스의 컨트롤을 이용하는 함수는,
    저장 사용자 체험을 인캡슐레이션하는 하나 이상의 함수;
    아이템이 어플리케이션-정의 방식으로 표시될수 있도록 하는 하나 이상의 함수;
    아이템에 리스트에 추가될수 있도록 하는 하나 이상의 함수; 및
    아이템의 미리보기 이미지가 표시될수 있도록 하는 하나 이상의 함수
    를 포함하는 방법.
  35. 제29항에 있어서, 상기 사용자 인터페이스의 기능을 확장하는 함수는,
    컨텍스트 메뉴로의 추가를 허용하는 하나 이상의 함수;
    어플리케이션-정의된 썸네일의 식별을 허용하는 하나 이상의 함수; 및
    하나 이상의 파일 또는 폴더에 관한 정보를 표시할 때 계산이 수행될 수 있도록 하는 하나 이상의 함수
    를 포함하는 방법.
  36. 사용자 인터페이스의 컨트롤을 이용하는 하나 이상의 제1 함수로의 하나 이상의 호출을 수신하는 단계; 및
    상기 사용자 인터페이스의 데스크 탑의 기능을 확장하는 하나 이상의 제2 함수로의 하나 이상의 호출을 수신하는 단계
    를 포함하는 방법.
  37. 제36항에 있어서, 상기 사용자 인터페이스의 기능을 확장하는 하나 이상의 제3 함수로의 하나 이상의 호출을 수신하는 단계를 더 포함하는 방법.
  38. 제37항에 있어서, 상기 사용자 인터페이스의 기능을 확장하는 함수는,
    컨텍스트 메뉴로의 추가를 허용하는 하나 이상의 함수;
    어플리케이션-정의된 썸네일의 식별을 허용하는 하나 이상의 함수; 및
    하나 이상의 파일 또는 폴더에 관한 정보를 표시할 때 계산이 수행될 수 있도록 하는 하나 이상의 함수
    를 포함하는 방법.
  39. 제36항에 있어서, 상기 사용자 인터페이스의 다이얼로그 및 마법사를 이용하는 하나 이상의 제3 함수로의 하나 이상의 호출을 수신하는 단계를 더 포함하는 방법.
  40. 제39항에 있어서, 상기 사용자 인터페이스의 다이얼로그 및 마법사를 이용하는 함수는,
    파일 및 폴더가 열리고 저장될수 있도록 하는 다이얼로그를 이용하는 하나 이상의 함수;
    광 디스크가 기록될 수 있도록 하는 마법사를 이용하는 하나 이상의 함수; 및
    전자 메일에 의해 이미지를 전송하는 것을 용이하게 하는 또 다른 마법사를 이용하는 하나 이상의 함수
    를 포함하는 방법.
  41. 제36항에 있어서, 상기 사용자 인터페이스의 컨트롤을 이용하는 함수는,
    저장 사용자 체험을 인캡슐레이션하는 하나 이상의 함수;
    아이템이 어플리케이션-정의 방식으로 표시될수 있도록 하는 하나 이상의 함수;
    아이템에 리스트에 추가될수 있도록 하는 하나 이상의 함수; 및
    아이템의 미리보기 이미지가 표시될수 있도록 하는 하나 이상의 함수
    를 포함하는 방법.
  42. 제36항에 있어서, 상기 데스크탑의 기능을 확장하는 함수는,
    사이드바가 상기 데스크탑 상에 표시될 수 있도록 하는 하나 이상의 함수; 및
    어플리케이션-정의된 통지가 데스크 탑 상에서 표시될 수 있도록 하는 하나 이상의 함수
    를 포함하는 방법.
KR1020040072563A 2003-10-24 2004-09-10 컴퓨터 플랫폼에 대한 프로그래밍 인터페이스 KR101076904B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/693,718 2003-10-24
US10/693,718 US7493592B2 (en) 2003-10-24 2003-10-24 Programming interface for a computer platform

Publications (2)

Publication Number Publication Date
KR20050039547A true KR20050039547A (ko) 2005-04-29
KR101076904B1 KR101076904B1 (ko) 2011-10-25

Family

ID=34394597

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040072563A KR101076904B1 (ko) 2003-10-24 2004-09-10 컴퓨터 플랫폼에 대한 프로그래밍 인터페이스

Country Status (10)

Country Link
US (4) US7493592B2 (ko)
EP (1) EP1526450A3 (ko)
JP (2) JP2005174283A (ko)
KR (1) KR101076904B1 (ko)
CN (1) CN1609794A (ko)
AU (1) AU2004206974B2 (ko)
BR (1) BRPI0403821A (ko)
CA (1) CA2481552C (ko)
MX (1) MXPA04008851A (ko)
RU (1) RU2365972C2 (ko)

Families Citing this family (93)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7493592B2 (en) * 2003-10-24 2009-02-17 Microsoft Corporation Programming interface for a computer platform
US7636922B2 (en) * 2004-05-03 2009-12-22 Microsoft Corporation Generic user interface command architecture
US20060059569A1 (en) * 2004-08-27 2006-03-16 Microsoft Corporation Application and device user verification from an operating system-based authentication service
US7788300B2 (en) * 2004-09-15 2010-08-31 Sap Ag Garbage collection for shared data entities
DE102005009529A1 (de) * 2005-03-02 2006-09-07 Siemens Ag Datenverarbeitungssystem zur Integration zweier Frameworks
US7761848B1 (en) * 2005-03-15 2010-07-20 Open Invention Network, Llc Code generator tool for building software applications with reusable components
US7685175B2 (en) * 2005-08-12 2010-03-23 Michael Lee Carroll Content manager
US20070074185A1 (en) * 2005-08-30 2007-03-29 Microsoft Corporation Identifier expressions
US7694285B2 (en) * 2005-08-30 2010-04-06 Microsoft Corporation Relaxed and extended delegates
US8863010B2 (en) * 2005-12-27 2014-10-14 Sap Ag Linking user interface design environment and application development environment
US20070174384A1 (en) * 2006-01-25 2007-07-26 John Abd-El-Malek Sidebar communication system and method
US20070223462A1 (en) * 2006-03-27 2007-09-27 Steven Hite Enhanced service delivery platform that provides a common framework for use by IMS and Web applications in delivering services
US7739660B2 (en) * 2006-03-31 2010-06-15 Sap Ag Code management in a distributed software development environment
US7730478B2 (en) 2006-10-04 2010-06-01 Salesforce.Com, Inc. Method and system for allowing access to developed applications via a multi-tenant on-demand database service
US8375362B1 (en) * 2006-11-28 2013-02-12 Emc Corporation Wizard for web service search adapter
US20080155559A1 (en) * 2006-12-21 2008-06-26 Ilja Fischer Portal eventing directory
US8001530B2 (en) * 2006-12-28 2011-08-16 Sap Ag Method and framework for object code testing
US8566781B2 (en) * 2007-04-23 2013-10-22 Siemens Aktiengesellschaft Model-based view parts and reusable data source configurations
US20080270911A1 (en) * 2007-04-24 2008-10-30 Nehal Dantwala System and method to develop a custom application for a multi-function peripheral (mfp)
US20090113292A1 (en) * 2007-10-26 2009-04-30 Microsoft Corporation Flexibly editing heterogeneous documents
US20100333017A1 (en) * 2007-11-27 2010-12-30 David J. Ortiz Computer graphic user interface and display system
US8505038B2 (en) * 2008-01-28 2013-08-06 Blue Coat Systems, Inc. Method and system for enhancing MS exchange (MAPI) end user experiences in a split proxy environment
US8302017B2 (en) * 2008-03-05 2012-10-30 Microsoft Corporation Definition for service interface
US8055619B2 (en) * 2008-06-05 2011-11-08 Novell, Inc. Mechanisms to support object-oriented version control operations
US20100037240A1 (en) * 2008-08-08 2010-02-11 Microsoft Corporation Non Intrusive Application Mechanism
US8676942B2 (en) * 2008-11-21 2014-03-18 Microsoft Corporation Common configuration application programming interface
CA2708908C (en) 2009-06-11 2016-01-12 Accenture Global Services Gmbh Assessment system for choosing maintenance approaches for gui-directed test scripts
CN101957750A (zh) * 2009-07-20 2011-01-26 鸿富锦精密工业(深圳)有限公司 电子装置及在电子装置上实现用户界面的方法
US8935656B2 (en) * 2009-09-09 2015-01-13 International Business Machines Corporation Communicating information in computing systems
US20110131523A1 (en) * 2009-11-30 2011-06-02 International Business Machines Corporation Grouping of windows based on user-defined contexts
US10089119B2 (en) * 2009-12-18 2018-10-02 Microsoft Technology Licensing, Llc API namespace virtualization
US20110271184A1 (en) * 2010-04-28 2011-11-03 Microsoft Corporation Client application and web page integration
US9158444B2 (en) * 2010-05-26 2015-10-13 Avaya Inc. User interface for managing communication sessions
US8671384B2 (en) * 2010-06-11 2014-03-11 Microsoft Corporation Web application pinning including task bar pinning
US9164671B2 (en) 2010-06-11 2015-10-20 Microsoft Technology Licensing, Llc Web application navigation domains
US8863001B2 (en) 2010-06-11 2014-10-14 Microsoft Corporation Web application home button
US8793650B2 (en) 2010-06-11 2014-07-29 Microsoft Corporation Dynamic web application notifications including task bar overlays
US8826134B2 (en) * 2010-09-10 2014-09-02 Sony Computer Entertainment America Llc Pivot command for playlist
US8694956B2 (en) * 2010-10-14 2014-04-08 Red Hat Israel, Ltd. PowerShell cmdlets code generating tool for communicating to the web services
US8407159B2 (en) 2010-11-17 2013-03-26 Microsoft Corporation Automatic batching of GUI-based tasks
US9176742B2 (en) * 2010-12-27 2015-11-03 Microsoft Technology Licensing, Llc Converting desktop applications to web applications
US9413815B2 (en) * 2011-01-05 2016-08-09 Appcitylife, Inc. Methods and apparatuses for imparting functionality to a mobile computing device
US9210213B2 (en) 2011-03-03 2015-12-08 Citrix Systems, Inc. Reverse seamless integration between local and remote computing environments
US8866701B2 (en) 2011-03-03 2014-10-21 Citrix Systems, Inc. Transparent user interface integration between local and remote computing environments
CN102779032B (zh) * 2011-05-11 2016-02-03 深圳市金蝶中间件有限公司 基于复合组件的请求处理方法及系统
US9003318B2 (en) * 2011-05-26 2015-04-07 Linden Research, Inc. Method and apparatus for providing graphical interfaces for declarative specifications
US10417018B2 (en) * 2011-05-27 2019-09-17 Microsoft Technology Licensing, Llc Navigation of immersive and desktop shells
US20120304283A1 (en) * 2011-05-27 2012-11-29 Microsoft Corporation Brokered item access for isolated applications
US9843665B2 (en) 2011-05-27 2017-12-12 Microsoft Technology Licensing, Llc Display of immersive and desktop shells
US9483304B2 (en) 2011-07-29 2016-11-01 National Instruments Corporation Interface wires for a measurement system diagram
US8776094B2 (en) 2011-08-11 2014-07-08 Microsoft Corporation Runtime system
US9304518B2 (en) * 2011-08-24 2016-04-05 Bio-Rad Laboratories, Inc. Modular automated chromatography system
US8695021B2 (en) 2011-08-31 2014-04-08 Microsoft Corporation Projecting native application programming interfaces of an operating system into other programming languages
US9946430B2 (en) 2011-09-21 2018-04-17 Facebook, Inc. Displaying social networking system user information via a timeline interface
US10296159B2 (en) * 2011-09-21 2019-05-21 Facebook, Inc. Displaying dynamic user interface elements in a social networking system
US8887035B2 (en) 2011-09-21 2014-11-11 Facebook, Inc. Capturing structured data about previous events from users of a social networking system
US8869017B2 (en) 2011-09-21 2014-10-21 Facebook, Inc Aggregating social networking system user information for display via stories
US8726142B2 (en) 2011-09-21 2014-05-13 Facebook, Inc. Selecting social networking system user information for display via a timeline interface
US9773284B2 (en) 2011-09-21 2017-09-26 Facebook, Inc. Displaying social networking system user information via a map interface
US8832560B2 (en) 2011-09-21 2014-09-09 Facebook, Inc. Displaying social networking system user information via a historical newsfeed
US9182886B2 (en) 2011-11-14 2015-11-10 Bio-Rad Laboratories Inc. Chromatography configuration interface
US9628438B2 (en) * 2012-04-06 2017-04-18 Exablox Consistent ring namespaces facilitating data storage and organization in network infrastructures
US9117052B1 (en) 2012-04-12 2015-08-25 Cadence Design Systems, Inc. Methods, systems, and articles of manufacture for interactively implementing physical electronic designs with track patterns
US8984465B1 (en) 2013-06-28 2015-03-17 Cadence Design Systems, Inc. Methods, systems, and articles of manufacture for automatically assigning track patterns to regions for physical implementation of an electronic design
US9251299B1 (en) 2013-06-28 2016-02-02 Cadence Design Systems, Inc. Methods, systems, and articles of manufacture for associating track patterns with rules for electronic designs
US9003349B1 (en) 2013-06-28 2015-04-07 Cadence Design Systems, Inc. Methods, systems, and articles of manufacture for implementing a physical electronic design with area-bounded tracks
CN102722367B (zh) * 2012-05-21 2015-11-25 深圳市茁壮网络股份有限公司 一种数据处理的方法、处理器及终端
WO2014035936A2 (en) 2012-08-31 2014-03-06 Citrix Systems Inc. Reverse seamless integration between local and remote computing environments
US9213793B1 (en) 2012-08-31 2015-12-15 Cadence Design Systems, Inc. Methods, systems, and articles of manufacture for implementing electronic designs using flexible routing tracks
US9183343B1 (en) 2012-08-31 2015-11-10 Cadence Design Systems, Inc. Methods, systems, and articles of manufacture for implementing high current carrying interconnects in electronic designs
US9104830B1 (en) * 2013-06-28 2015-08-11 Cadence Design Systems, Inc. Methods, systems, and articles of manufacture for assigning track patterns to regions of an electronic design
CN103685688B (zh) * 2012-09-06 2016-08-03 中兴通讯股份有限公司 控制移动终端消息的方法、系统及移动终端
US9691128B2 (en) 2012-09-20 2017-06-27 Facebook, Inc. Aggregating and displaying social networking system user information via a map interface
US9766783B2 (en) 2012-09-20 2017-09-19 Facebook, Inc. Displaying aggregated social networking system user information via a map interface
US9817941B2 (en) 2012-12-04 2017-11-14 Cadence Design Systems, Inc. Methods, systems, and articles of manufacture for implementing high current carrying interconnects in electronic designs
US9430133B2 (en) 2012-12-17 2016-08-30 Sap Se Career history exercise with stage card visualization
US9116710B2 (en) * 2012-12-22 2015-08-25 Oracle International Corporation Dynamic user interface authoring
RU2536391C1 (ru) * 2013-04-26 2014-12-20 Общество с ограниченной ответственностью "1С" Способ автоматизированного изменения интерфейса (варианты)
US9165103B1 (en) 2013-06-28 2015-10-20 Cadence Design Systems, Inc. Methods, systems, and articles of manufacture for tessellating and labeling routing space for routing electronic designs
US9569105B2 (en) * 2014-06-18 2017-02-14 Mediatek Inc. Method for managing virtual control interface of an electronic device, and associated apparatus and associated computer program product
CN105446711B (zh) * 2014-08-08 2018-10-02 国际商业机器公司 获取用于软件开发任务的上下文信息的方法及装置
US10635504B2 (en) 2014-10-16 2020-04-28 Microsoft Technology Licensing, Llc API versioning independent of product releases
CN104991452A (zh) * 2015-05-12 2015-10-21 广东瑞德智能科技股份有限公司 一种在面向对象编程中用于家电控制框架的设计方法
US10235163B2 (en) * 2017-06-16 2019-03-19 Red Hat, Inc. Coordinating software builds for different computer architectures
US10678809B2 (en) * 2017-09-11 2020-06-09 Microsoft Technology Licensing, Llc Synchronizing non-file content stored on a collaborative workspace environment
CN110362412A (zh) * 2018-04-09 2019-10-22 华为技术有限公司 一种服务api调用方法和相关装置
CN109976861B (zh) 2019-03-28 2023-01-10 北京小米移动软件有限公司 交互界面显示方法、装置及存储介质
US11379104B2 (en) * 2019-06-07 2022-07-05 Microsoft Technology Licensing, Llc Sharing user interface customization across applications
CN110851240B (zh) * 2019-11-18 2022-04-29 北京小米移动软件有限公司 功能调用方法、装置及存储介质
US11368373B2 (en) * 2020-06-16 2022-06-21 Citrix Systems, Inc. Invoking microapp actions from user applications
CN112965832B (zh) * 2021-02-18 2023-09-26 腾讯科技(深圳)有限公司 一种远程过程调用rpc服务调用方法和相关装置
US11966573B2 (en) * 2021-06-02 2024-04-23 Microsoft Technology Licensing, Llc Temporarily hiding user interface elements
CN113741879B (zh) * 2021-08-30 2022-03-22 北京宇信科技集团股份有限公司 一种可视化开发平台、方法、介质和设备

Family Cites Families (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5321750A (en) 1989-02-07 1994-06-14 Market Data Corporation Restricted information distribution system apparatus and methods
US5339392A (en) 1989-07-27 1994-08-16 Risberg Jeffrey S Apparatus and method for creation of a user definable video displayed document showing changes in real time data
US5297032A (en) 1991-02-01 1994-03-22 Merrill Lynch, Pierce, Fenner & Smith Incorporated Securities trading workstation
AU3969093A (en) 1992-04-30 1993-11-29 Apple Computer, Inc. Method and apparatus for organizing information in a computer system
US5701462A (en) * 1993-12-29 1997-12-23 Microsoft Corporation Distributed file system providing a unified name space with efficient name resolution
US5689700A (en) * 1993-12-29 1997-11-18 Microsoft Corporation Unification of directory service with file system services
US5689701A (en) * 1994-12-14 1997-11-18 International Business Machines Corporation System and method for providing compatibility between distributed file system namespaces and operating system pathname syntax
US5819284A (en) 1995-03-24 1998-10-06 At&T Corp. Personalized real time information display as a portion of a screen saver
US5933599A (en) * 1995-07-17 1999-08-03 Microsoft Corporation Apparatus for presenting the content of an interactive on-line network
US5903753A (en) * 1995-08-18 1999-05-11 International Business Machines Corporation Name space registry with backward compatibility for older applications
JPH09330214A (ja) * 1996-06-12 1997-12-22 Hitachi Ltd プログラム自動生成方式
US5959621A (en) 1996-12-06 1999-09-28 Microsoft Corporation System and method for displaying data items in a ticker display pane on a client computer
US6216141B1 (en) 1996-12-06 2001-04-10 Microsoft Corporation System and method for integrating a document into a desktop window on a client computer
RU2127019C1 (ru) 1997-08-01 1999-02-27 Рыжов Владимир Александрович Пульт дистанционного управления устройствами бытовой техники и компьютерными системами
WO1999026127A1 (en) 1997-11-14 1999-05-27 Avesta Technologies, Inc. System and method for displaying multiple sources of data in near real-time
US6311058B1 (en) 1998-06-30 2001-10-30 Microsoft Corporation System for delivering data content over a low bit rate transmission channel
US6449638B1 (en) 1998-01-07 2002-09-10 Microsoft Corporation Channel definition architecture extension
US6278448B1 (en) 1998-02-17 2001-08-21 Microsoft Corporation Composite Web page built from any web content
US6038567A (en) 1998-02-19 2000-03-14 Microsoft Corporation Method and system for propagating object properties in a desktop publishing program
US6094706A (en) * 1998-03-02 2000-07-25 International Business Machines Corporation Caching in a data processing system using the pigeon hole principle
US6446253B1 (en) 1998-03-20 2002-09-03 Novell, Inc. Mechanism for achieving transparent network computing
US6832355B1 (en) 1998-07-28 2004-12-14 Microsoft Corporation Web page display system
US6915301B2 (en) * 1998-08-25 2005-07-05 International Business Machines Corporation Dynamic object properties
US6188405B1 (en) 1998-09-14 2001-02-13 Microsoft Corporation Methods, apparatus and data structures for providing a user interface, which exploits spatial memory, to objects
US6510553B1 (en) 1998-10-26 2003-01-21 Intel Corporation Method of streaming video from multiple sources over a network
US6456334B1 (en) 1999-06-29 2002-09-24 Ati International Srl Method and apparatus for displaying video in a data processing system
US6618716B1 (en) 1999-07-30 2003-09-09 Microsoft Corporation Computational architecture for managing the transmittal and rendering of information, alerts, and notifications
US6976210B1 (en) 1999-08-31 2005-12-13 Lucent Technologies Inc. Method and apparatus for web-site-independent personalization from multiple sites having user-determined extraction functionality
US6968438B1 (en) * 1999-09-20 2005-11-22 Texas Instruments Incorporated Application programming interface with inverted memory protocol for embedded software systems
US7020697B1 (en) * 1999-10-01 2006-03-28 Accenture Llp Architectures for netcentric computing systems
US6724403B1 (en) 1999-10-29 2004-04-20 Surfcast, Inc. System and method for simultaneous display of multiple information sources
US7987431B2 (en) 1999-10-29 2011-07-26 Surfcast, Inc. System and method for simultaneous display of multiple information sources
US7028264B2 (en) 1999-10-29 2006-04-11 Surfcast, Inc. System and method for simultaneous display of multiple information sources
WO2001033349A2 (en) * 1999-11-03 2001-05-10 Accenture Llp Architectures for netcentric computing systems
US6762767B2 (en) 2000-04-06 2004-07-13 Microsoft Corporation Theme aware management using fusion
US6753885B2 (en) 2000-04-06 2004-06-22 Microsoft Corporation System and theme file format for creating visual styles
US20030182469A1 (en) 2000-06-09 2003-09-25 Simon Lok Distributed computer system using a graphical user interface toolkit
JP4046994B2 (ja) * 2001-12-06 2008-02-13 キヤノン株式会社 情報処理装置及び情報処理方法
US6964025B2 (en) * 2001-03-20 2005-11-08 Microsoft Corporation Auto thumbnail gallery
US7185290B2 (en) * 2001-06-08 2007-02-27 Microsoft Corporation User interface for a system and process for providing dynamic communication access and information awareness in an interactive peripheral display
US20020186257A1 (en) * 2001-06-08 2002-12-12 Cadiz Jonathan J. System and process for providing dynamic communication access and information awareness in an interactive peripheral display
US7581231B2 (en) * 2001-07-10 2009-08-25 Microsoft Corporation Computing system and method for allowing plurality of applications written in different programming languages to communicate and request resources or services via a common language runtime layer
US7546602B2 (en) * 2001-07-10 2009-06-09 Microsoft Corporation Application program interface for network software platform
US6845403B2 (en) 2001-10-31 2005-01-18 Hewlett-Packard Development Company, L.P. System and method for storage virtualization
US7549129B2 (en) * 2001-10-31 2009-06-16 Microsoft Corporation Computer system with enhanced user interface for images
JP3908944B2 (ja) * 2001-11-30 2007-04-25 ソフトバンクモバイル株式会社 携帯通信機器
EP1326189A3 (en) * 2001-12-12 2005-08-17 Microsoft Corporation Controls and displays for acquiring preferences, inspecting behaviour, and guiding the learning and decision policies of an adaptive communications prioritization and routing systems
US7712034B2 (en) * 2003-03-24 2010-05-04 Microsoft Corporation System and method for shell browser
US7409644B2 (en) * 2003-05-16 2008-08-05 Microsoft Corporation File system shell
US7587411B2 (en) 2003-03-27 2009-09-08 Microsoft Corporation System and method for filtering and organizing items based on common elements
US7343567B2 (en) * 2003-04-25 2008-03-11 Microsoft Corporation System and method for providing dynamic user information in an interactive display
US7281202B2 (en) * 2003-06-19 2007-10-09 Microsoft Corporation Framework for creating modular web applications
US7669140B2 (en) * 2003-08-21 2010-02-23 Microsoft Corporation System and method for providing rich minimized applications
US7493592B2 (en) * 2003-10-24 2009-02-17 Microsoft Corporation Programming interface for a computer platform
US8375293B2 (en) 2005-01-09 2013-02-12 Apple Inc. Method and apparatus for defining documents
US8819569B2 (en) 2005-02-18 2014-08-26 Zumobi, Inc Single-handed approach for navigation of application tiles using panning and zooming
US7933632B2 (en) 2005-09-16 2011-04-26 Microsoft Corporation Tile space user interface for mobile devices
US8316105B2 (en) 2007-03-22 2012-11-20 Microsoft Corporation Architecture for installation and hosting of server-based single purpose applications on clients
US8176466B2 (en) * 2007-10-01 2012-05-08 Adobe Systems Incorporated System and method for generating an application fragment
US20100251143A1 (en) * 2009-03-27 2010-09-30 The Ransom Group, Inc. Method, system and computer program for creating and editing a website
US8819172B2 (en) 2010-11-04 2014-08-26 Digimarc Corporation Smartphone-based methods and systems
US8589815B2 (en) 2010-03-10 2013-11-19 Microsoft Corporation Control of timing for animations in dynamic icons

Also Published As

Publication number Publication date
CA2481552C (en) 2012-01-03
RU2004127215A (ru) 2006-02-20
KR101076904B1 (ko) 2011-10-25
US20050091670A1 (en) 2005-04-28
MXPA04008851A (es) 2005-06-17
RU2365972C2 (ru) 2009-08-27
EP1526450A2 (en) 2005-04-27
BRPI0403821A (pt) 2005-06-21
CA2481552A1 (en) 2005-04-24
US20130159965A1 (en) 2013-06-20
US9459837B2 (en) 2016-10-04
JP2005174283A (ja) 2005-06-30
US20130031504A1 (en) 2013-01-31
US9430193B2 (en) 2016-08-30
JP2012128878A (ja) 2012-07-05
EP1526450A3 (en) 2008-05-07
CN1609794A (zh) 2005-04-27
AU2004206974B2 (en) 2009-11-12
US7493592B2 (en) 2009-02-17
AU2004206974A1 (en) 2005-05-12
US8312422B2 (en) 2012-11-13
US20090125822A1 (en) 2009-05-14

Similar Documents

Publication Publication Date Title
KR101076904B1 (ko) 컴퓨터 플랫폼에 대한 프로그래밍 인터페이스
JP5787963B2 (ja) コンピュータプラットフォームのプログラミングインターフェース
KR101120788B1 (ko) 최종 사용자 규칙 논리의 정의 및 실행을 위한 규칙프레임워크
RU2365978C2 (ru) Интерфейс программирования для компьютерной платформы
US8972872B2 (en) Building computing applications based upon metadata
US6308179B1 (en) User level controlled mechanism inter-positioned in a read/write path of a property-based document management system
JP5389902B2 (ja) ウェブサイト及びそのコンテンツの作成及び管理のためのオブジェクト指向のシステム
US7844947B2 (en) Runtime services for network software platform
US20070136676A1 (en) Managing information display
JP2007537512A (ja) エンドユーザルールロジックを定義し、実行するルールフレームワーク
WO1995013585A1 (en) Compound document framework
US8359606B2 (en) Generic user interface command architecture
US20080005752A1 (en) Methods, systems, and computer program products for generating application processes by linking applications
US20060089941A1 (en) Data source objects for producing collections of data items
US6880006B1 (en) System and method for contextual passive rule-based navigation between applications supporting network-disconnected use
JP5650877B2 (ja) 複数のコンピューティング機能ソースを用意するための装置及び方法
Powers et al. Visual Basic programmer's guide to the. NET Framework class library
Aimonetti MacRuby: The Definitive Guide: Ruby and Cocoa on OS X

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20140929

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20150918

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20160921

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20170919

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20180918

Year of fee payment: 8