"Sencha Touch" estas unu malgranda programlingvo, verkita en Ĝavaskripto, kiu estas por malreale intern ekrano de TTT-legilo montri funkciojn de poŝtelefono. La plej nova versio de la libraro estas 2.1. Krom ekranon de TTT-legilo la libraro povas iel malreale servi poŝtelefonan kameraon, GPS, ktp. "Sencha touch" povas aktori multon da famaj poŝtelefonaj familioj: Androido, iPad, Symbian, ktp. do "Sencha touch" estas moda nune.

Elŝuti la libron (kun necesa CSS) oni povas el oficiala paĝo www.sencha.com/products/touch

Por traduki programon, verkitan en "Sencha Touch", al reala poŝtelefono, ekzistas speciala ilo PhoneGap, sed kun la versiojn 2.x la firmao permesas elŝuti "SDK tools", kiujn oni lanĉas intern linuksa ŝelo aŭ intern Mikrosofta DOS.

"GUI"
-----

"Sencha Touch" povas sufiĉe vere aktori tutan GUI de modernaj sensoraj poŝtelefonoj. Sed por ĉi tio "Sencha Touch" bezonas la kvinan version de HTML kaj la trian version de CSS. Krome,
taŭgas ne ĉiu TTT-legilo, taŭgas nure la TTT-legila familio, kiu nomatas "WebKit", kies ekzemploj estas "Google Chrome", "Safari", ktp.

Objektemo
---------

Oni povas difini klasojn (kio estas nekutima en ordinara Ĝavaskripto) per la komando `Ext.define`.
La unua argumento estas nomo por la nova klaso kaj la dua argumento estas objekto, kiun oni plenas tra 4 anoj:

* `extend`:klaso kiun nova klaso heredas
* `config`:anaro, en kiu eblas esti ankaŭe anoj de la patra klaso, per ĉi tiu anaro oni povas difini novajn anojn kaj redifini malnovajn anojn
* `statics`:la samo, sed apartanta ne objektojn sed klasojn
* `constructor`:funkcio, kiu lanĉatas dum kreado de ĉiu objekto de la klaso

Oni kreas objektojn de la klaso per la komando `Ext.create`.
La unua argumento estas nomo de klaso kaj la dua argumento estas tabelo da argumentoj por `constructor`.

Ĉiu klaso en "Sencha Touch" estas objekto, kies nomo estas sama nomo, kiun oni metis en la komandon `define`.

"Package"
---------

Ekzistas reguloj por krei dosierojn por klasoj:

1. Konservu ĉiun klason en ĝia propra dosiero, kies nomo samas nomon de klaso sed havas sufikson ".js"
2. Oni rajtas konservi klasan dosieron intern dosierujo. Nomo de dosierujo estas nomo de objekto, kies ano estas la klaso (do la tuta nomo de ĉi tia klaso inkludas punkton)

Interese, ke la komando `create` naskas klason eĉ se objekto, kies ano estas la klaso, ne ekzistas. La komando naskas la ujan objekton kun la klason. Nure poste la komando komencas krei objekton de la klaso. Sufiĉas ekzisto de samnoma dosierujo kaj interneco de la klasa dosiero intern la dosiero. Ĉi tio similas la aferon "package" Ĝave.
Por ĉi tiu afero en "Sencha Touch" estas malpermesita uzo de la ĝavaskripta komando `new`, kvankam reale ĉiu klaso estas ĝavaskripta funkcio. Per la komando `create` "Sencha Touch" ekscias dosierujojn, kie troveblas dosiero de la klaso, legas la dosieron kaj kreas dosierujajn objektojn, se ili ne ekzistas.

Ekzistas alia povo elŝuti klason, sen krei ĝian objekton (ĉi tio estas utila, ekzemple, se oni volas la anojn de la klaso, kiuj estas `statics`). Por ĉi tio oni uzas tabelon `requires`, en kiun oni metas klasojn, kiuj estas necesaj kaj devas esti elŝutitaj antaŭe.

"Singleton"
-----------

Oni havas en "Sencha Touch" la aferon, kiu nomatas en objektema programado "Singleton".
En la dua argumento de komando `define` krom la 4 supre menciitaj anoj ekzistas la ano:

* `singleton`:ĉu klaso estas "singleton" aŭ eblas naski plurajn objektojn

Se oni elektas "true", la komando `define` naskas ne klason, sed objekton (t.e. la funkcio `Ext.isObject()` pri la rezulto de la komando `define` respondas "true"). La komando `create` donas saman objekton.

"MVC" en Sencha Touch
---------------------

Modelo-vidigilo-regilo estas en *Sencha Touch* preskaŭe nepra maniero (pro celoj de la lingvo).
Ekzemple, ekzistas "package" `controller`, kie troveblas klaso de Regilo.
Objekto de Regilo aperas meme tuje post fino de la komando `launch`.
Vidigilon oni ankaŭe kutimas meti en specialan `package`. Ĝia nomo estas `view`.

Interese aspektas Modelo en *Sencha Touch*. Kvankam ekzistas speciala `package` `model`, nur nomoj de ĉiuj ecoj de Modelo konservatas ĉi tie, staton de la ecoj oni ne konservas en ĉi tiu `package`. Se oni volas tute obei la regulon Modelo-vidigilo-regilo, oni laŭ postuloj de *Sencha Touch* rajtas nure la ejon `store` elekti por konservi staton de programo. Se programisto ne volas konservi statojn de programo, li eĉ iom malfidelas la regulon Modelo-vidigilo-regilo kaj kunigas Modelon kun unu el restaj anoj de la trio. La plej fama ekzemplo - se Vidigilo devas montri iun liston, kiu konservatas en `store`, programistoj ne verkas tiel, ke Regilo elŝutas informacion por listo el `store`, ili verkas tiel, ke listo estas rekte ligita kun `store` kaj tuje montras ĉiujn okazojn de `store` (ĉi tiaj ligoj nomatas angle "binding", t. e. "ligo"). Ĉi tiaj "malbonaj" ligoj plirapidigas funkciadon de programo, kio estas grava ĉe malfortaj komputilaj specoj. Ĉi tiu afero tute similas la faman aferon, kiu volonte uzatas ĉe ĉiu programlingvo, - montri tion, kio okazas intern programo, tra `console`. Kvankam `console` estas iusence Vidigilo, programistoj ne kutimas verki spektanton, kiu spektas Modelon por doni informacion al `console`, programistoj preferas meti intern Modelon komandojn al `console`, kvankam laŭ la regulo Modelo-vidigilo-regilo Modelo nenion scias pri Vidigilo (nature, ĉi tiu fama afero, kiu angle nomatas "log", pli uzatas dum testo de preta programo ol post vendo de programo, sed ŝatantoj de Linukso ĉi tiun aferon uzas tutvive).

Sed dank la stranga versio de la regulo "Modelo-vidigilo-regilo" oni povas konservi en `store` historion de ĉiuj statoj de programo. Ĉi tio estas inda pro tio, ke ĉe modernaj poŝtelefonoj modas, ke poŝtelefono memoras lastan staton de programo se uzanto ial paŭzis esti en programo (kutime programoj ne havas butonon malŝalti).

"Naming conventions"
--------------------

Ekzistas "Naming conventions" en "Sencha Touch", kiuj tre similas la Ĝavajn:

1. La unua litero de klaso estas granda, la restaj - malgrandaj, ekzemple: `Besto`
2. Ĉiu litero de variablo (ekzemple, de objekto de klaso) estas malgranda, ekzemple: `kato=Ext.create("Besto")`
3. Ĉiu litero de funkcio, kiu estas ano de klaso (de "method") estas malgranda, krom de tiuj literoj, kiuj signifas komencon de nova vorto, ekzemple: "kato.riceviNomon()". Krome, ĉi tia nomo devas esti verbo (eble, kun akuzativo)
4. Ĉiu litero de konstanto estas granda, ekzemple: `Besto.POVAS_MANĜI`