参加
最後オンライン
最近の投稿
JavaScriptに投稿されました 続きを読む

プロトタイプベースとクラスベース

C++、Javaのようにクラス-インスタンスという概念を使用するオブジェクト指向言語のことを、クラスベースオブジェクト指向言語(Class Based Object Oriented Language)と言います。
それとは異なり、JavaScriptでは、クラス-インスタンスという考え方をせず、オブジェクトは別なオブジェクトを元(プロトタイプ)にして独自の特徴を付加することで存在する、という考え方をします。
このようなオブジェクト指向言語のことを、プロトタイプベースオブジェクト指向言語(Prototype Based Object Oriented Language)と言います。

JavaScriptでは、オブジェクト自身が独自の特徴を付加するので、オブジェクトにプロパティを追加したり削除したりすることができます。

コンストラクタという機構

JavaScriptでオブジェクトを生成するには、コンストラクタとnewという演算子を使用します。 
実はコンストラクタとは関数オブジェクトの事です、全ての関数はオブジェクトを生成するコンストラクタになる可能性がありますが、まずは一番シンプルな例を見てください。

単純なコンストラクタ 

function SimpleConstructor() {} 
var obj = new SimpleConstructor(); 

普通にfunction文で定義した関数にnewをつけて呼び出しているだけです。こうすることで、新しいオブジェクトが生成され、戻り値として返されます。 
return文を記述しなくても生成されるオブジェクトが返される事に注意してください。

通常、コンストラクタとして呼ばれる関数の中では、生成しようとするオブジェクトの初期化を行います。 

function PropSetConstructor() { 
  this.prop1 = 10; 
  this.prop2 = 20; 
} 
var obj1 = new PropSetConstructor(); 
alert(obj1.prop1);    // 10 と表示される。 
var obj2 = new PropSetConstructor(); 
alert(obj2.prop1);    // 10 と表示される。 

コンストラクタとして関数オブジェクトを実行した場合、thisには今新たに生成されようとしているオブジェクトが入ります。
従って、thisにプロパティを設定してやれば、newして作成されるオブジェクトの初期定義を行う事ができます。
こうする事で、同じコンストラクタを用いて複数のオブジェクトを生成すると、同じプロパティを持つオブジェクトを簡単に作成する事ができます。

もちろんdelete演算子を使用すればプロパティを削除できるので、同じコンストラクタから作成されても常に必ず同じプロパティを持つとは限らない事に注意してください。 

暗黙の参照

プロトタイプベースのオブジェクト指向言語では、オブジェクトトは別のオブジェクトをプロトタイプとしてできていると考えます。JavaScriptではこれを暗黙の参照という形で実現している。オブジェクトAをプロトタイプとしているオブジェクトBは、オブジェクトAに対し暗黙の参照を持っているという状態になります。 
Javaで言うなれば、非staticなinner classのインスタンスがenclosing classのインスタンスに対し、暗黙の参照を持っている状態を考えてもらえば良いです。つまりしたのような状態になります。 
暗黙の参照: 

var objectA = ... 
// objectB は objectA に対し暗黙の参照を持っている 
// (objectAはobjectBのプロトタイプである)。 
var objectB = ... objectA.hoge = 10;   // objectA の hoge プロパティをここで設定する。 
alert(objectB.hoge);  // 10 と評価される。 

すなわち、あるオブジェクトがプロパティを評価された時、自分自身がそのプロパティを持っていなければ、暗黙の参照をたどって、その先のオブジェクトのプロパティを評価します。 
これがJavaScriptにおけるプロトタイプの仕組みです。

prototypeオブジェクト

全ての関数オブジェクトはprototypeというプロパティを保持している。関数オブジェクトを定義した直後では、このprototypeには何もプロパティを持たないシンプルなオブジェクトを参照しているが、別のオブジェクトを代入したり、新たなプロプロパティを設定したりする事が可能です。 
その関数オブジェクトをコンストラクタとして生成されたオブジェクトは、コンストラクタのprototypeプロパティに代入されているオブジェクトに対し、暗黙の参照を持つのです。つまりprototypeが指すオブジェクトトがプロトタイプとなるというわけです。  

具体的にコードは以下: 
prototypeオブジェクト 

function PrototypeTestConstructor() {} 
// prototype オブジェクトに prop1 というプロパティを設定。 
PrototypeTestConstructor.prototype.prop1 = 30; 
var obj = new PrototypeTestConstructor(); 
alert(obj.prop1);    // 30 と表示される。 

つまりPrototypeTestConstructorによって生成されたオブジェクトは、PrototypeTestConstructor.prototypeが指すオブジェクトを暗黙的に参照するようになります。 
あるコンストラクタをnewしてできるオブジェクトが全てそのprototypeへの暗黙の参照を持つので、そのプロパティはクラス変数の様にnewされたオブジェクトで共有されることとなる。次の例を見てください。  

代入はprototypeをたどらない。 

function Constructor() {} 
Constructor.prototype.prop1 = 30; 
var objA = new Constructor(); 
var objB = new Constructor();  //   [α] 
alert(objA.prop1)     // 30 と表示される。 
alert(objB.prop1)     // 30 と表示される。 
objA.prop1 = 100;     //   [β] 
alert(objA.prop1)     // 100 と表示される。 
alert(objB.prop1)     // 30と表示される 

というのも、読み取り評価の時は、暗黙の参照をたどるのですが、代入やdelete演算子は、たどらないのである。従って、objA.prop1 = 100;を行った時点で、objAそのものにprop1というプロパティが新たに作られ、そこに100が代入されるのです。よってConstructor.prototype.prop1の値は変わらないままとなります。

この場合、objA.prop1を呼び出すと、objA自身にはprop1があるため、その値である100と評価され、objB.prop1を呼び出すと、暗黙の参照をたどり30と評価されます。

この仕組みがプロトタイプベース言語であるJavaScriptのオブジェクトの根幹となります。

プロトタイプチェーン

コンストラクタのprototypeには、オブジェクトも代入できるので、prototypeに代入したオブジェクトが別のオブジェクトをプロトタイプにしている事もあります。そもそも全てのオブジェクトはObject.prototypeを暗黙的に参照しています。

こうしたプロトタイプの連鎖のことをプロトタイプチェーンと呼びます。 
プロトタイプチェーン: 

var objA = new Object(); 
objA.prop1 = 10; 
function Func1() {} 
Func1.prototype = objA; 
var objB = new Func1(); 
function Func2() {} 
Func2.prototype = objB; 
var objC = new Func2(); 
alert(objC.prop1);       // 10 と評価される。 

 以上までがJavaScriptのプロトタイプのメカニズムです。JavaやC++といったクラスベースの言語には根本的に無い考え方なので若干戸惑うかも知れないが、全てのオブジェクトがが実体を持った別のオブジェクトトに連鎖しているということが分かれば整理できます。

ではあるオブジェクトのプロパティを評価した際、仮に何らかの値が返ってきたとしても、そのオブジェクト自身がプロパティを持っているのか、そのオブジェクトのプロトタイプが持っているのか、判断することができません。     そこで、JavaScriptでは全てのオブジェクトに(すなわちObject.prototypeに)、hasOwnPropertyというメソッドが定義されている。これは引数で与えた文字列に一致するプロパティを、そのオブジェクト自身が持っているかどうかを判断してくれるメソッドです。  具体例を見てください。 

function Constructor() {} 
Constructor.prototype.prop1 = 30; 
var objA = new Constructor(); 
// objA 自体は持っていないので false。 
alert(objA.hasOwnProperty("prop1")); 
objA.prop1 = 100; 
// objA 自体が持っているので true。 
alert(objA.hasOwnProperty("prop1")) 

このhasOwnPropertyメソッドを使うことで、そのオブジェクトト自身にプロパティがあるかどうかを判断することができます。

継承

継承に関して言えば、 JavaScript には 1 つだけオブジェクトに関する概念があります。あるオブジェクトはプロトタイプと呼ばれる、他のオブジェクト(または null )への内部的な繋がりを持ちます。このオブジェクトは、あるオブジェクトがそのプロトタイプとして null を持つまで、なおプロトタイプを持ちます。このような、オブジェクトが他のオブジェクトのプロトタイプとなることの連鎖を、プロトタイプチェーンと呼びます。

プロパティの継承

JavaScript のオブジェクトはプロパティ(自身のプロパティを指す)の動的な「かばん」で、プロトタイプオブジェクト(または null )への繋がりを持っています。  あるオブジェクトにプロパティをセットすると、自身のプロパティが作られます。この取得と設定の動作の規則の唯一の例外は、 getter または setter とのプロパティの継承が起こるときです。

「メソッド」の継承

JavaScript それ自体に「メソッド」はありません。 JavaScript には関数があり、これらの関数はプロパティの値として使用することができます。 関数の継承(メソッドのオーバーライドの一種)は、上で見せたような property shadowing を含めたどのような値とも、同じように働きます。

関数がオブジェクトのプロプロパティ(自身の、または継承された)であることのたった1つの違いは、関数が実行されるときの this の値です。

JavaScriptに投稿されました 続きを読む

JavaScriptは 最初は Sun Microsystems社とNetscape Communications社が開発した、 Webブラウザなどでの利用に適したスクリプト言語です。ブラウザ以外のソフトウェアにも簡易な制御プログラムの記述用言語として移植されており、 Microsoft社のWindowsやMacromedia社の「Flash」などがあります。

各社の実装に微妙な違いがあり、ブラウザによって使えない機能があったり同じプログラムでも挙動が異なったりする問題があったため、ヨーロッパの標準化団体ECMAがソフトウェアメーカーに呼びかけて、通称「ECMAScript」と呼ばれる標準を発行しました。2014年5月現在ECMAScriptの最新バージョンは2009年12月に策定されたECMAScript 5th Editionで6th editionの策定も進みつつあっています。

JavaScriptとECMAScript

以下の表でJavaScriptとECMAScriptのバージョン対応を示します。

JavaScriptバージョン公開日ECMAScriptとの対応
1.01996/03-
1.11996/08-
1.21997/07-
1.31998/10edition 1 edition 2
1.4廃棄
1.52000/11edition 3
1.62005/11
1.72006/10
1.82008/06
1.8.52010/07edition 5
1.8.6--
2.0-edition 6

主要ソフトウェアのJavaScript対応

以下の表で主要ソフトウェアのバージョン毎のJavaScript対応を示します。

ソフトウェアバージョン呼称対応するJavaScriptバージョン
Chrome33JavaScript1.7
Firefox1.0JavaScript1.5
1.51.6
2.01.7
3.01.8
41.8.5
171.8.6
IE6JScript5.61.5
7JScript5.7
8JScript5.8
9JScript?1.8.5
Adobe Acrobat11JavaScript1.5?
JavaScriptに投稿されました 続きを読む

Javascriptは、ほかの言語と比べると、以下のような特徴を持っております。

完全なオブジェクトベース

JavaScriptでは、数値や文字列、配列、関数などのデータはすべてオブジェクトです。例えばStringオブジェクトは文字列の長さを返すlengthというプロパティを持っていますので、“Hi,world!”.lengthを参照すると、 9がリターン値になります。 
JavaScriptのオブジェクトは、単純に言うと「キーと値のペアの集合」です。ですので、これは一般的なプログラミング言語でよくあった連想配列の性質を持っていると言えます。

プロトタイプを使ったオブジェクト指向

Java や C++ といったクラスベースのオブジェクト指向言語はクラスとインスタンスという、2つの異なる実体があるという概念に基づいています。 
クラスはあるオブジェクトの集合を特徴付けるすべてのプロパティ(Java ではメソッドとフィールドを、C++ ではメンバをプロパティと見なす)を定義します。 
クラスとはそれが表すオブジェクトの集合という抽象的なものです、例えば、Employeeクラスは従業員すべてを含む集合を現します。 
一方、インスタンスはクラスを実例にしたものです、例えば、Victoriaさんは、Employeeクラスのインスタンスとなることができます。

JavaScriptのオブジェクト指向は、プロトタイプを利用しています。クラス/インスタンスの区別がなく、単にオブジェクトがあるだけです。但し、原型的なオブジェクトという概念がありまして、このオブジェクトは新しいオブジェクトの初期プロパティを取得する元になるテンプレートとして使用されます。 
どのオブジェクトも、作成時にも実行時にもそれ独自のプロパティを指定できます。さらに、どのオブジェクトも別のオブジェクトに対するプロトタイプとして関連付けることができます。

関数型プログラミングの一部サポート

JavaScriptでは関数型言語の一部の機能が備わっています。関数型言語それ自体は難しいかも知れませんが、JavaScriptで関数型を考えるにあたっては、下記三点を抑えられればよいです。

  • すべての関数が値を返す
  • 関数に副作用がない(参照透過)
  • 関数を値として扱える

すべての関数が値を返す

すべての関数は値を返します、明示的な実装がなければ、返却値はundefinedになります。

関数に副作用がない

簡単に考えると、下記2点となります。

  • 関数は外側の変数を変更しない
  • 参照渡しの引数の値を変更しない

関数が値として扱える

関数が値として扱えるので引数に関数を渡して処理を委譲、もしくは、関数を返り値として処理を委譲する事もできます。 
これらの関数を高階関数と言います。 
さらに、関数は、すべてクロージャであり、定義された時の環境への参照をもっているため、クロージャの性質を利用して、JavaSript固有のざまざまなカプセル仕組みを実現することができます。

JavaScriptはよく、「少ないソースコードで高機能のロジックを簡潔に実現できる」プログラミング言語として高く評価されていますが、これは、ほとんどこの関数のパワーからできているものと考えれます。

iOSに投稿されました 続きを読む

iOS(アイオーエス)は、アップルが開発・提供するOSシーリズです。iPhone、iPod touch、iPad、iPad mini、Apple TVに搭載されています。 
元はiPhone OS(アイフォーン オーエス)という名前だったが、2010年6月21日にリリースされたバージョン4.0からは現在のiOSという名称に変更されました。

タイムライン

年月出来事
2007年6月iPhone OS公開
2008年7月iPhone OS 2公開、AppStore搭載 ソフトバンクからiPhone OS 2が搭載されたiPhone3Gが発売
2009年6月iPhone OS 3公開  ソフトバンクからiPhone OS 3が搭載されたiPhone3GSが発売、日本で爆発的にiPhoneが流行
2010年6月iOS4公開、マルチタスクサポート
2011年10月iOS5公開、Siriサポート、iCloud連携
2012年9月iOS6公開、Apple製の地図アプリ内蔵
2013年9月iOS7公開、スキュモーフィズムからフラットデザインへ変更
2014年9月iOS8公開、ファミリー共有機能
2015年iOS9公開、3D Touch登場
2016年iOS10公開、日本でもApple Payが利用可能に
2017年iOS11公開、カメラ機能の強化とアニ文字
2018年iOS12公開

Windowsに投稿されました 続きを読む

Windowsとは、Microsoft社のOSのシリーズ名です。  

主な歴史

バージョン1.0は1986年に発売され、1992年に発売されたWindows 3.1がPC/AT互換機用の標準OSとして爆発的に普及しました。 
クライアント版のOSとして、その後継のWindows95、Windows98、WindowsMeともMS-DOSを土台にしております。

一方、1993年から発売が開始されたWindows NTシリーズはネットワークサーバ用途を前提に0から開発された、APIレベルでは互換性を持っていながら基本構造がWindows3.x/9xと全く異なるOS系列です。
暫くクライアント版の9x系列とサーバ版のNT系列と共存の時代でしたが、Windows2000からクライアント版のWindowsもNTベースのシステムを採用するようになりました。
この結果、Windows 95/98/Meで採用された9xカーネルベースの製品は現在は存在しません。

2019年現在の最新版は、クライアント版はWindows 10、サーバ版はWindows Server 2019、モバイル版はWindows  10 Mobileです。

タイムライン

下記の表にてWindowsのタイムラインを示します。

年代出来事
1982~1985年Windows 1.0 の登場
1987~1990年Windows 2.0 ~ 2.11 - より多いウィンドウ、より速いスピード
1990~1994年Windows 3.0 ~ Windows NT - いよいよグラフィックスへ
1995~1998年Windows 95 - PC とインターネットの時代の到来
1998~2000年Windows が仕事と遊びのために、Windows 98、Windows 2000、そして Windows Me へと進化
2001~2005年Windows XP - 安定性、使用便利性、高速
2006~2008年Windows Vista - セキュリティでスマートに
2009~2011年Windows 7 で Windows タッチを導入
2012年Windows 8 がアプリとタイルを特色に
2013年Windows 8.1 が Windows 8 のビジョンを拡大
Windows Server 2012 R2
2015年Windows 10
Windows 10 mobile
Windows 10 IoT
2016年Windows Server 2016
2018年Windows Server 2019
金融に投稿されました 続きを読む

銀行の主な業務は以下のように分類することができます。

  • 固有業務 
    銀行法で定められた銀行の本業で、銀行の3大業務と呼ばれている「預金業務」「融資業務」「為替業務」から構成されます。
    • 預金業務 
      たくさんの預金者から預金という形でお金を集める業務です。
    • 融資業務 
      資金を必要としている会社などに貸し付ける業務です。
    • 為替業務 
      給料や年金の受け取りや、電気代・水道代といった公共料金の支払いなど、会社や個人などの依頼に基づいて、お金を送金したり受け取ったりする業務です、決済業務ともいいます。
  • 付随業務 
    固有業務以外で銀行法で定められている業務です。以下のような業務があります。
    • 債務保証
    • 社債の募集委託
    • 手形引受
  • 周辺業務 
    固有業務以外で銀行法で定められいない業務です。以下のような業務があります。
    • クレジットカード
    • 信用保証
    • 貸金庫
金融に投稿されました 続きを読む

銀行は以下のように分類されることが多いです。

  • 都市銀行 
    全国規模で銀行サービスを提供する銀行です。多くの場合国際的な取引も行います。全国的なサービス網を持つことは強みです。
  • 地方銀行 
    地方都市に密着する銀行です。地域密着型のサービスを提供することは強みです。
  • 信託銀行 
    通常の銀行業務に加えて「信託業務」を行うことが許されている銀行です。相続や不動産仲介などに強みを持っています。
  • 外国銀行 
    日本国外に本店がある銀行です。
  • 新たな形態の銀行 
    ネットバンク等  代表的なものが「ネットバンク」あとはATM決済を基本とした「セブン銀行」、商業施設との連携を基本とした「イオン銀行」などがあります。
ERPに投稿されました 続きを読む

歴史

SAPのERPソリューションは歴史的にはR/1→R/2→R/3→ERP→S/4 HANAの5世代に分けることができます。 
R/1→R/2→R/3の「R」はリアルタイムという意味が含まれていて、S/4のSはシンプルの意味です。

世代リリース日特徴その他:SAP社/IT世界の出来事
R/11973年
  • メインフレームで動作する会計システムとしてアセンブラ言語で開発されていました
  • ミドルウェアとなるBASISの概念がなかったため、プラットフォームに合わせてアプリケーションを構築する必要
  • 欧州の多国籍企業向けに複数の通貨、言語に対応していました
  • パラメータ変更によって各社の個別要件の差異を吸収するパッケージ型ソフトウェアという概念を実現
  • 1972年にSAP社が数名のIBM出身者によって成立されました
R/21979年
  • ABAP、Dynpro言語で開発されています
  • 稼働環境はIBMおよび独シーメンス社のメインフレームでした
  • 1980年代はメインフレーム時代の全盛期です
R/31991年(初版)
  • クライアント/サーバシステム、オープンプラットフォームに対応しています
  • UNIXシステムの上に動作できます
  • 80年代後半からはオープンシステムの波が寄せ始め、90年代には完全にUNIXやWindowsの時代となります。
  • SAPジャパンの設立が1992年
1996年
  • 3.1版がリリースされました
  • Windowsの上に動作できます。
  • インターネット経由での利用が可能になっています
1997年
  • 4.0版がリリースされました
  • インターネット上でのB2Bが可能になっております
2002年
  • R/3 Enterpriseがリリースされました
  • 基盤になるBasis(ベーシス)が切り離しされ、Webアプリケーションサーバに変わりました。
2003年
  • mysAP ERP 2003がリリースされました
  • SAP R/3 EnterpriseとNetWeaverとセットにした製品です
ERP2004年
  • mySAP ERP 2004がR/3 Enterpriseの後継者としてリリースされました
  • 「SAP ECC (ERP Central Component; ERPの中央プログラム)5.0」と統合基盤「NetWeaver2004」が融合されていて、従来のR/3 Enterpriseの機能はSAP ECC 5.0に引き継がれています。
  • 2008年1月にBI(ビジネス・インテリジェンス)ソフトウェア専業最大手のBO社を68億ドルで買収しました
  • 2010年5月にデータベースベンダのSybase社を58億ドルで買収しました
2006年
  • mySAP ERP 2005⇒SAP ERP 2005⇒SAP ERP 6.0がリリースされました
  • mySAP ERP 2004の後継者としてリリースされた製品。
  • SOA や内部統制の対応が特色になっています。
  • 旧SAP R/3の部分は、SAP ECC 6.0と呼ばれています。
S/4 HANA2015年同社のインメモリーデータベースSAP HANAをプラットフォームに採用-

テクニカルに投稿されました 続きを読む

用途

日時を指定フォーマットで文字列に変換する。

構文

@FormatDateTime(strDateTime, strPattern, strTimeZone, strLocale)

パラメータ

strPattern

javaのSimpleDateFormatクラスの日付パターンに従っています。

文字説明出力例(記述例)
G紀元AD(G)
y1996(yyyy); 96(yy)
MJuly(MMMM); Jul(MM); 07(MM)
w年における週27(ww)
W月における週2(W)
D年における日189(DDD)
d月における日10(dd)
F月における曜日2(F)
E曜日の名前Tuesday(EEEEEEE); Tue(EEE);
u 曜日の番号(1:月曜、・・・7:日曜)1(u)
a午前/午後PM(a)
H一日における時(0 - 23)00(HH)
k一日における時(1 - 24)24(kk)
K午前/午後の時(0 - 11)00(KK)
h午前/午後の時(1 - 12)12(hh)
m30(mm)
s55(ss)
Sミリ秒978(SSS)
z一般的なタイムゾーンPacific Standard Time; PST; GMT-08:00
データモデルに投稿されました 続きを読む

クリップボードは、データオブジェクト(Pegaではページと呼ばれる)を保持するためのメモリ領域です。

システムページ

システムページはアプリケーションサーバーの起動時に作成され、アプリケーションサーバーがシャットダウンされるまで存続します。このページには、実行時のシステム全体の状態と設定情報が含まれています。

リクエスターページ

リクエスターページは、ユーザー(ゲストまたは認証済み)に関連付けられたデータ、リクエスタページは、リクエスタの存続期間中存在します。

スレッドページ

スレッドページのセットは、pxThreadページ、匿名(名前なし)ページ、および名前付きページで構成されています。

pxThreadページには、スレッドレベルの情報が含まれており、実行時にProcess Commanderに対してユーザーおよび接続固有の状態と構成情報が含まれています。
匿名ページ用のメモリは、Javaの規則に従って自動的に管理されます(JVMがこのメモリへの参照がなくなったことを検出すると、ガベージコレクションの対象としてマークされます)。
名前付きページのメモリは、Process Commanderまたはアプリケーションによって割り当てられ、解放されます。

ユーザーページ

ユーザーページは、Page-Newメソッドなど、いくつかの方法のいずれかを使用してアクティビティが作成する最上位のクリップボードページです。ログアウトすると、(Obj-Saveメソッドで)PegaRULESデータベースに保存されていないユーザーページはメモリから削除されます。