プログラミング 基礎(復習)
プロパティとは
メンバ変数の値の取得や変更を行うためのメソッド(アクセサー)のこと
メンバ変数へのクラス外部から直接アクセスできるようにすることは
オブジェクトの状態が不正な値に書き換えられエラーになることや、その
メンバ変数が絡んだ修正が入った時にオブジェクトの値を利用する側のクラスの修正量が
増えてしまったりするリスクがある。
↓
そのため、メンバ変数は基本的にそのクラス内だけで利用し外部クラスから
直接アクセスできない状態にして、メンバ変数とのやりとりはメソッドを
活用するようにする事が望ましい
活用するための準備 基本
・get{}set{}だけでひとかたまりで記述できる
・利用者側のクラスでは、変数に直接アクセスしているかのように
「インスタンス.プロパティ名」だけで値のやりとりができるようになるのが利点
プロパティを記述するクラスでは、
アクセスレベル型 プロパティ名{}で宣言し、その中にset{}get{}を記述
set{}の中には「メンバ変数 = value」と記述。
valueは利用者側のクラスで代入された値が格納される予約語
get{}の中には「return メンバ変数」戻り値を指定する形になる
活用するため 基本
準備が完了後、
利用者側のクラスでインスタンスを生成し、値の取得時は
「インスタンス名.プロパティ名」で
get{}を呼び出し、
「インスタンス名.プロパティ名 = 値」で
set{}を呼び出す
これを扱うと、
プロパティを記述するクラスでは、メソッドとして
扱うことができ、
利用者側のクラスではメンバ変数のように
扱うことができる
省略系
{set; get;}の記述のみでも上記と同じ意味になる
★アクセスレベルについて
set{},get{}のアクセスレベルを変更できる
public property{ protected set; get;}と記述すると、
set{}をprotectedにしたので、利用者側ではアクセスできなくなる。
get{}はデフォルトのpublicなので、アクセスが可能
★get-onlyについて
set{}を記述しない書き方
get-onlyにすると、コンストラクタでのみ
値を代入できるようになり、以降は変更不可となる。
https://www.sejuku.net/blog/102827
プロパティの活用
●細かい疑問点
■自動実装プロパティとpublicフィールドの違い
・外部から扱う場合、特に違いなし
・自動プロパティが有用な点(get,setで異なるアクセスレベルを設定可能になる)
■プロパティとメソッドの違い
メソッドは操作を表し、プロパティはデータを表す
例え:
「人」オブジェクトがあれば、
「名前」や「性別」はデータ
「歩け」や「走れ」といった操作(動作)はメソッド
■フィールドとプロパティの差
・フィールドはクラスのメンバ変数
・プロパティはpropertyの構文で作られた変数
違い:
後者はアクセス権や範囲チェックなどの検証ロジックが
必要になるため、低速になる
VisualStudio .NetFramework/.Net Standard/.Net Coreの違い
■ .Net Frameworkとは
Windows向けのアプリケーションを動作させるためのランタイム実行環境。
特徴:.Net FrameworkはNet Frameworkというアプリケーションフレームワークでもあり、様々な機能をライブラリとして提供している。
このライブラリを使用することでWindowsの機能を簡単に実装することを可能にする。
■ .Net Coreとは
特徴:Linux系OS(Debian,Fedora,Ubuntu,etc)やmacOS,Windowsなどクロスプラットフォームを対象。
■ Xamarin
.Netファミリーの一員。
特徴:Xamarinの使用により、
macOSアプリ、UWPアプリ、iOSアプリ、Andoroidアプリなど、クロスプラットフォームを対象としたアプリケーションを作成することができる。
Xamarinを使用するとiOS、Android、UWPアプリを一度に作ることが可能。
Xamarinは、テクノロジー自体は、.Net FrameworkとC#を基盤にしている。(Monoというライブラリを使用する)
■ .Net Standardとは
.Net APIの正式な仕様
特徴:.Net Standardに従って作成されたAPIは、.Net Framework、.Net Core、Xameinといった全ての.Net 実装において、共通となるクラスライブラリを提供することを可能にする。
.Net Stanadard又は(Base Class Library)と呼ばれ、=BCLと呼ばれることもある。
WPFとは
WPF(Windows Presentaion Foundation)の略。
◆魅力的な外見のユーザーエクスペリエンスを持つWindowsクライアントアプリケーションを作成するための次世代プレゼンテーションシステム。のこと。
ユーザーエクスペリエンス・・経験によって習得した知識・技術
プレゼンテーションシステム・・・アプリケーションの使用者であるユーザーがアプリケーションを評価するときの最大のポイントは見た目のユーザーインターフェースである。
ユーザーエクスペリエンスなユーザーインターフェースを持てばアピール度合いが向上する。
この手段を提供する仕組みが「プレゼンテーションシステム」
この2つの意味を掛け合わせたものがWPF。
Windowsアプリケーションを構築するためのフレームワーク(クラス、ライブラリ)などで構成されている。
Webアプリケーション_開発モデル
■MVCとは
「Model」「View」「Controller」の3つに分割する。
ユーザーが直接参照・編集する情報から分離する。
Model・・アプリケーションが扱う領域のデータと手続きを表現する要素である。
また、データの変更をViewに通知するのもモデルの責任である。
(モデルの変更を通知するのにObserverパターンが用いられることもある)
View・・モデルのデータを取り出してユーザが見るのに適した形で表示する要素。
UIへの出力を担当。
例え:
Webアプリケーションでは、HTML文章を生成して動的にデータを表示するためのコードなどにあたる。
GUIにおいては通常、改装構造を成す。
Controller・・ユーザからの入力(通常イベントとして通知される)をモデルへのメッセージへと変換してモデルに伝える要素である。
UIからの入力を担当。
直接に描画を行ったり、モデルの内部データを直接操作したりはしない。
Webアプリケーションで扱われるMVCには、Model2MVCと呼ばれる派生のものが近いという。
◆MVC
ViewとModelが繋がっており、データのやり取りが発生する。
◇流れ
-----------------------------------------------------
ユーザーa
↓ ①ユーザーアクション
Controller(アクションからどの処理をするか依頼)
↓ ②処理依頼
Model(データを処理)
↓ ③処理済データの通知
View(表示反映処理)
↓ ④変更を表示
ユーザーa
-----------------------------------------------------
・MVCの場合、Viewがユーザーのための表示にデータを加工したり、ユーザーの操作を補助したりと、Viewが膨大化する傾向にある。そして、ViewとModelが密結合するため、双方の作業を分担しづらいという特徴も。
◆Model2のMVCとは、
ViewとModelは直接繋がらずControllerを介して両者が接続される。
そのため、ViewとModelは独立し、基本ViewとModelはControllerを介してやりとりをする。
◇流れ
-----------------------------------------------------
ユーザーb
↓ ①ユーザーアクション
Controller
↓ ②データ処理・取得
Model
↓②データ処理・取得
Controller
↓③処理後データ通知
View
↓④変更を表示
ユーザーb
-----------------------------------------------------
・特徴としては、ViewとModelが分かれるため、作業分担しやすくなる反面、2つの仲介を果たすので、Controllerの役割が大きくなりがちになること。
□MVCとModel2MVCの判断
・デスクトップアプリなどのアプリケーションでMVCという場合は、MVCを指すことが多い。
・RailsなどのWebアプリケーションでは、ModelMVCを指すことが多い。
WebアプリケーションがHTMLでの操作、表示が基本のため、従来のMVCよりもModel2MVCに沿った考え方の方が馴染みやすかったなのではと言われています。
■MVPとは
Model2MVCのModelとViewの結びつきをもっとに疎にしたもの。
「Model」「View」「Presenter」の3つに分割する。
MVCと同じようにパターンがあり、
・パッシブブュー(Passive View)
・監視コントローラ(Supervising Controller)
の2つに分かれる。
◆パッシブヴュー(Passive View)MVP
◇流れ
-----------------------------------------------------
ユーザーc
↓ ①ユーザーアクション
View
↓ ②アクション伝達
Presenter
↓ ③データ処理・取得
Model
↓ ③データ処理・取得
Presenter
↓ ④処理後データ反映
View
↓ ⑤変更を表示
ユーザーc
-----------------------------------------------------
Model2MVCと同じような流れですが、ModelとViewが完全に分離され、Presenterがその仲介を果たします。Model2MVCよりより分離するということが念頭に置かれている。
こちらもModel2MVC同様に仲介役のPresenterの役割が膨れる傾向にある。
そして、ユーザーからViewを通してPresenterという流れになっているのはModel2MCVとの違いの1つになるともいえる。
◇監視コントローラ(Supervising Controller)MVP
ViewがModelのデータに基づくUIを用意する場合
ViewがModelのデータ情報を監視(Obsserve)し、Modelの状態に応じて表示を変更する。
ただし、データの変更に関してはViewから直にModelを操作せずPresenterを挟んでModelへのデータ変更の処理を行う。
◇流れ
-----------------------------------------------------
ユーザーd
↓①ユーザーアクション
View
↓②アクション伝達
Presenter
↓③データ処理・取得
Model
↓③データ処理・取得
Presenter
-----------------------------------------------------
・ViewはModelを常にデータの変更を監視又、
監視に追従し適宣表示変更をユーザーに行うことを行っている
特徴としては、
ユーザーアクションでViewが変わる場合はPresenterからViewに変更指示が届きますが、Model起因のデータの場合はPresenterを挟まずにView側でデータを直接参照して表示を行います。
ですから、モデル内のデータをそのまま表示させるような仕様の場合、効果を発揮します。
例え:
.監視しているModelの情報をView側でリスト表示。
.ユーザーがリスト表示させたデータを操作する。
.操作された内容をPresenterに通知させる。
.操作された内容に基づき、PresenterがModel側へデータの更新を依頼。
.依頼された内容に基づき、Model内のデータを更新。
.Model内の更新をView側の監視が察知し、リスト表示に反映させる。
監視を挟んでいることにより、Presenterからの操作のみという一貫性も担保、Viewからはデータが操作できず、Presenterを経由せずともデータの繁栄を察知することが可能。
PresenterからViewへのデータ加工のコストが減るためその分Presenterの膨大化を和らげることができる。
しかし、
MVC同様にViewとModelの密度が上がるので、ViewのデザインにModelが引っ張られる可能性がある。
■MVVMとは
双方向データバインディングという形でViewとViewModelを結びつけている。
◇流れ
-----------------------------------------------------
ユーザーe
↓↑ ユーザーアクション
Bindにより適宣表示変更
View
↕ 双方向(DataBind)→ユーザーアクションで入力数値等に変更があればViewModel
側に反映
ViewModel
↕ データ処理・所得
Model
-----------------------------------------------------
双方向データバインドとは
データ(Data)を結びつける(Bind)する機能のこと。
監視コントローラ型のMVPで挙げた監視よりも更に密な考え方でUIとデータオブジェクトを結びつけて、同一のデータをやりとりできるようにしてUIが操作されるとデータ側も書き換えるような仕組みです。
また、双方向データバインディングの場合は、データが書き換えられていてもUIに反映。UI側の情報が書き換えられても反映というような相互でデータを更新をやりとりするイメージ。
ViewModelとは
Modelから取得したデータをバインディングできるようにデータを定義して表示と連動してデータが変更され、またデータに直接操作が必要な場合はModelへ操作を依頼するものとして存在するのが、ViewModel。
Modelのデータを直接ViewのUIで取り扱いできない場合でもViewModelを用意し中間に挟むことで実現できるようにしている。
MVVMとデータバインディング
データバインディングができて初めて適用できるモデル。データバインディングの機能を有していないフレームワークでは実現ができない。
まとめ
MVCには、デスクトップアプリケーションとWebアプリケーションでは、MVCのモデルは異なる。
MVCとModel2MVC
MVPには、大きく2種類あり、
ViewとModelを監視する形で結びつける「監視コントロールMVP」
と
ViewとModelを完全に独立させ、Presenterで結ぶ「パッシブビューMVP」がある。
MVVMは、ViewModelというModelのデータをViewで扱いやすくするようなものを設けデータバインディングという機能を使い、データそのものを共有して行う。
それぞれの要素の関係性、要素が受け持つ範囲が違うため、MVC,MVPを利用時はどこまでがViewに相当するのか、ControllerやPresenterに相当するのか、担当範囲を明確にしておくことが必要。
ASP.NETの全体像
■Webフォーム
サブフレームワークの一つ。
サーバーコントロールと呼ばれるUI部品が豊富に用意されているのが特徴。
*イベントドリブンモデル*を採用していることからWindowsアプリケーション開発の知識をほとんどそのまま、ASP.NETアプリケーションの開発にも利用できるというメリット。
*イベントドリブンモデルとは
ボタンがクリックされた、選択行が変化した、など、ページで発生したイベント(出来事)をトリガーにコードを実行するプログラミングモデルのこと。
ASP.NET開発の主流ともいうべき地位を確立しているもの。
■ASP.NET WebPages
.Net Framework以前のASP(Active Server Pages)、PHPによく似た技術で、HTML埋め込み型モデルを採用している。
@...の形式で、HTMLの中にコードを埋め込むことができます。
2011年にリリースされ、無償のWebサイト構築ツールWebMatrixの標準技術として採用された。
小規模なサイト開発での利用を想定しており、デザイナー、システム管理者、あるいは、その性質上、PHPでの開発に慣れた人などにお勧めで、気軽に手を付けられるのが、特徴。
Web APIとは、「Web経由で利用できるAPI」のこと。
例えば、「Youtube Data API」というWeb APIがありますが、これを利用することで、アプリケーションからYoutubeの機能にアクセスするためのサービスです。ですから、Youtubeで提供されている動画を検索し、リスト表示する、といった機能を、あたかも自分のアプリケーションの一部であるかのように実装できる。
Web上では、このようなWeb APIが豊富に提供されているため、これらを組み合わせることにより、労少なく高機能なアプリケーションを実装できる。
ASP.NET MVCでも実装することは可能で、ASP.NET Web APIの方が機能特化している分、同じことをするにもシンプルに表現できる。
■SignalIR
リアルタイム性が求められるようになってきた。
そのリアルタイム通信に対応するためのライブラリ。
クライアントの実装に応じて、最適なトランスポート(通信手段)を選択しますので、アプリケーションが低レベルな手続きを意識しなくてもよいというのが特徴。
■ASP.NET Single Page Application(SPA)
単一のページで構成されるWebアプリケーションのこと。初回のアクセスでは、まずページ全体を取得しますが、以降ページ更新は基本的にjavaScriptで行います。
JavaScript単独で賄いきれない部分(データの取得/更新)は、Ajaxなどの通信技術によって実装する。
デスクトップアプリケーションによく似た操作性、そして、敏速な動作を実現するためのアプローチとして、注目される。
JavaScript 基礎_if文+α
■if文
if文
if(条件設定)
{
条件に合うときに実行される
}
-----------------------
var jaugeA=10;
var jaugeB="10";
var jaugeC;
if(jaugeA == jaugeB)
{
jaugeC=jaugeA+jaugeB
document.write(jaugeC);
}
-----------------------
◇数字の10と文字列の10だが、実行される
実行結果:NaN
-----------------------
var jaugeA=10;
var jaugeB="10";
var jaugeC;
if(jaugeA === jaugeB)
{
jaugeC=jaugeA+jaugeB
document.write(jaugeC);
}
-----------------------
◇上記の場合、条件判定にて、型が違うため、実行されない。
実行結果:空のまま
・==と===との条件判定の違いによって、結果が変わる。
==でも、判定を行ってくれるが、===の場合、型の判定も込みで行ってくれるので、条件判定を厳密に行ってくれる。
■switch文
switch(値)
{
case 値1:
実行する文;
break;
case 値2:
実行する文;
break;
case 値3:
実行する文;
break;
}
・switch文は値によって、分岐を分ける方法で、switch()の()内に何が入っているかでその値に該当するcase文に飛ぶ。
var Quote=[one,two,three];
switch(Quote)
{
case one:
document.write("oneです。");
break;
case two:
doument.write("twoです。");
break;
case three:
document.write("threeです。");
break;
}
※ break;を付け忘れると、そのまま処理されるため、breakの記述を忘れないこと。
例え:
case oneに飛び、breakがない場合、case twoの処理も行われる。