冬天有什么水果| 做肝功能检查挂什么科| 人体最大的细胞是什么| 小孩牙疼吃什么药| 肾属于什么科| 甘油三酯高吃什么| 棒打鸳鸯什么意思| 做尿常规挂什么科| 实体店是什么意思| 猫癣用什么药| 儿童缺铁吃什么补得快| 什么降糖药效果最好| 低钠盐适合什么人吃| 庚午五行属什么| 男人经常熬夜炖什么汤| 柔情似水是什么意思| 总恶心是什么病的前兆| 六月下旬是什么时候| 第二次世界大战是什么时候| 梦到自己牙齿掉了是什么意思| 腿抖是什么病的预兆| 脱氧核苷酸是什么| 喝白醋有什么好处| 勃艮第红是什么颜色| 希腊用什么货币| 钟是什么生肖| 榴莲吃多了有什么坏处| 什么是应激反应| 头晕四肢无力是什么原因| 乙肝携带者是什么意思| 两个立念什么| 结扎对男的有什么影响| 3月1日是什么星座| 条件兵是什么意思| 咳嗽吃什么好的快偏方| 农历八月十五是什么节日| 徒然是什么意思| 久负盛名的负是什么意思| 平的反义词是什么| 骨折吃什么恢复的快| 返图是什么意思| 缘是什么意思| 白化病是什么能活多久| 大陆去台湾需要什么手续| 哪吒妈妈叫什么| 早泄有什么办法| 承上启下是什么意思| 胆囊壁稍毛糙是什么意思| 脑梗三项是检查什么| 腹部ct平扫能检查出什么| 喝酒不能吃什么药| 作恶多端是什么意思| cu什么意思| 不食人间烟火是什么意思| 吃什么对眼睛有好处| 老舍有什么称号| 喝牛奶什么时候喝最好| 盆腔少量积液是什么问题| 试婚是什么意思啊| 夜尿次数多是什么原因| 什么叫贫血| 什么带不能系| 妈妈的堂哥叫什么| 什么叫皈依| cosplay什么意思| 听之任之是什么意思| 包皮龟头炎吃什么药| 羊水透声欠佳什么意思| 享年是什么意思| 什么是增强ct| 窦房结是什么意思| 术后吃什么| 姑婆的老公叫什么| 大便培养是检查什么的| 烂漫什么意思| 精分是什么意思| 望梅止渴是什么意思| 纪委是什么| 儿童拖鞋什么材质好| ex是什么| 99什么意思| 胃阳不足吃什么中成药| 检验葡萄糖用什么试剂| 纳采是什么意思| 萨满教供奉什么神| 静电对人体有什么危害| 好好的什么意思| 乙酰氨基葡萄糖苷酶阳性什么意思| inr是什么意思| 凝神是什么意思| 21岁属什么生肖| 毛主席属什么生肖| ye是什么意思| 空调病是什么症状| 墨菲定律什么意思| 胳膊上的花是打了什么疫苗| 鼻咽炎有什么症状| 崩漏下血是什么意思| 塞来昔布是什么药| 梦见苹果是什么意思| 月寸读什么| 苏打水喝了有什么好处| 胸闷气短吃什么药效果好| 指甲缝疼是什么原因| 摩羯座属于什么象星座| 犯太岁是什么意思| 蹄花是什么| 甲状腺做什么检查| 烦恼的意思是什么| 为什么不呢| 睑腺炎是什么原因造成| 胃粘膜损伤吃什么药| 胃消化不良吃什么药| 小赤佬是什么意思| 髂胫束在什么位置| 天天想睡觉没精神是什么原因| 香港的海是什么海| 意思是什么意思| 必修课是什么意思| 最小的动物是什么| 黄瓜与什么相克| 慈禧和溥仪是什么关系| 梗阻是什么意思| 膝盖积液挂什么科| 一闪一闪的星星像什么| 百日咳是什么| 魅惑是什么意思| 6月份是什么季节| 一级军士长什么待遇| 梦见马是什么预兆| 三点水山今读什么| 外科是看什么病的| 野趣是什么意思| 乙肝有什么症状| 野生黄芪长什么样子的图片| 何其是什么意思| 非无菌是什么意思| proof是什么意思| 私房菜是什么意思| 得宫颈癌的前兆是什么| rdw是什么意思| 爱因斯坦发明了什么| 情种是什么意思| 警察为什么叫蜀黍| cd代表什么意思| 1987年属什么| 胆固醇高不可以吃什么食物| 隶属什么意思| 仙风道骨指什么生肖| 河南有什么美食| 山药和淮山有什么区别| 干燥症是什么症状| 印度神油是什么东西| 血糖高喝什么豆浆好| 为什么不能用红笔写名字| 中性是什么意思| 不外乎是什么意思| 40年什么婚| 痢疾吃什么药效果最好| 农村一般喂金毛吃什么| 动爻是什么意思| 脑供血不足食补吃什么| 四个口是什么字| 半夜流鼻血是什么原因| 大便不调是什么意思| 狗狗犬窝咳吃什么药| 情窦初开是什么意思| 海棠花什么季节开花| 吃猪肝补什么| 生肖兔和什么生肖相冲| 威士忌是什么酒| 5月6日什么星座| 大舅哥是什么意思| 如意什么意思| 信徒什么意思| 豆加支念什么| 火供是什么意思| 牙齿黑是什么原因| 县纪委副书记什么级别| 布谷鸟是什么鸟| 吃茴香有什么好处和坏处| 做喉镜挂什么科| 长智齿意味着什么| mcm是什么牌子| 谷草转氨酶是指什么| 什么病需要做透析| 不宁腿综合症是什么原因引起的| 桃子是什么颜色| 胃疼挂什么科| 一个月一个元念什么| 排浊是什么意思| 为什么一吃东西就拉肚子| 个子矮穿什么好看| 目前是什么意思| 大美女是什么意思| 人中短代表什么| 水土不服吃什么药| 胡萝卜不能和什么食物一起吃| 银环蛇咬伤后什么症状| 体温偏高的人说明什么| 报销什么意思| 2000年龙是什么命| 韩语欧巴是什么意思| 失代偿期的肝是属于什么程度| 龟头上有小红点是什么| 哥谭市是什么意思| 骇人是什么意思| 爱吃甜食是缺乏什么| 点痣挂什么科室| 茱萸什么意思| im医学上是什么意思| 喝酒不能吃什么东西| 炊饼是什么| 特别想睡觉是什么原因| 喝菊花茶有什么好处| 怀孕前一周有什么症状| 富硒对人体有什么好处| 白酒兑什么好喝| 豆腐有什么营养| 突然勃不起来是什么原因造成的| 禄位是什么意思| 男人做噩梦是什么预兆| 逃之夭夭是什么意思| 珀莱雅适合什么年龄| 较真的人是什么性格| 雪里红是什么菜| 女士喝什么茶叶对身体好| 五行海中金是什么意思| 什么叫热射病| 肺结核什么症状| 虫草什么时候吃最好| 球鞋ep是什么意思| miracle是什么意思| 气血不足吃什么中成药最好| 吃什么可以缓解焦虑| pdn是什么意思| 早上起来心慌是什么原因| 牛奶不能和什么东西一起吃| 今年52岁属什么生肖| 孩子记忆力差是什么原因| 什么是心脏病| 脾挂什么科| 不care是什么意思| 精神是什么意思| 你在纠结什么| 脚气吃什么维生素| 肾积水是什么原因造成的怎么治疗| cco是什么意思| noah是什么牌子| 镶牙与种牙有什么区别| 空前绝后是什么生肖| 肌无力是什么症状| 内窥镜是做什么检查| 胸一大一小什么原因| 孕期什么时候补铁| 铁观音什么季节喝最好| bpo是什么| 梦见别人盖房子是什么预兆| 超拔是什么意思| 发泡实验是检查什么的| 床上为什么会有跳蚤| skg是什么品牌| 癞蛤蟆长什么样| 男生为什么要割包皮| 百度P?esko?it na obsah

男人喝什么汤补肾壮阳

Z Wikipedie, otev?ené encyklopedie
Programovací paradigmata
百度 报道称,当测试新材料样品时,结果显示,昼夜温差仅10摄氏度就使得该材料产生了350毫伏电势和毫瓦功率。

Aspektově orientované programování (zkracováno na AOP, z anglického Aspect Oriented Programming) je programovací paradigma, které má za cíl zvy?it modularitu programu. Pokou?í se rozdělit program na jasné ?ásti, které se mezi sebou co nejméně p?ekryvají svou funkcionalitou. AOP se za?alo hojně pou?ívat zejména v roce 2004.

Vět?ina programovacích paradigmat podporuje ur?itou úroveň seskupení a zapouzd?ení dat do samostatnych, nezávislych subjekt?. Některé v?ak vzdorují této formě implementace a jsou nazyvány pr??ezové problémy (crosscutting concerns), proto?e se nachází ve více ?ástech programu. AOP má za cíl nahradit v kódu opakující se ?innosti, vzorovym p?íkladem pr??ezového problému je logování, proto?e se tyká ka?dé jednotlivé logované ?ásti programu. Logování tedy pro?ezává v?echny logované t?ídy, metody i procedury. V?echny implementace AOP mají nějaké pr??ezové vyrazy, které zapouzd?í danou ?innost na konkrétním místě. Rozdíl mezi implementacemi spo?ívá v náro?nosti, bezpe?nosti a pou?itelnosti poskytnutych konstrukcí. AspectJ má ?adu těchto vyraz? a zapouzd?uje je ve speciální t?ídě, zvané aspekt. Aspekt m??e upravit chování základního kódu (neaspektové ?ásti programu) pou?itím advice (dodate?né chování) v r?znych joinpoints (body ve struktu?e programu), zvany pointcut (soubor joinpoint?, pro které je spou?těna stejná advice). Aspekt také m??e dělat binárně kompatibilní strukturální změny jinych t?íd, co? je nap?íklad p?idání ?len? nebo rodi??.

Aspektově orientované programování má několik p?ímych p?edch?dc?: reflexe a metaobjektové protokoly, objektové programování, filtry a adaptivní programování.

Tento koncept vymyslel Gregor Kiczales s kolegy v Xerox PARC. Stejny tym vyvinul i první a zatím nejpou?ívaněj?í aspektově orientovany jazyk AspectJ.

Microsoft Transaction Server je pova?ován za první hlavní pou?ití AOP následovany Enterprise Java Beans.

Typy aspektově orientovaného programování

[editovat | editovat zdroj]

AOP se dá rozdělit na statické a dynamické. Statické AOP poskytuje nap?íklad AspectJ a dynamické Spring Framework.

Statické AOP

[editovat | editovat zdroj]

Statické AOP je rychlej?í ne? dynamické, jeliko? weaving (proces vkládání aspekt? do aplikace) probíhá ji? p?i buildu aplikace, p?ibyvá zde dal?í krok, av?ak kód AOP ji? p?i běhu aplikace nelze měnit. Pot?ebujeme-li tedy udělat jakoukoli změnu za běhu aplikace, jsme nuceni k opětovné kompilaci celé aplikace. Statické AOP se pou?ívá nap?íklad v ji? zmiňovaném AspectJ.

Dynamické AOP

[editovat | editovat zdroj]

Dynamické AOP je sice oproti statickému AOP pomalej?í, ale m??eme měnit kód zcela nezávisle na aplikaci. Změny v AOP tedy neznamenají nutnou opětovnou kompilaci celé aplikace. Je to zp?sobené tím, ?e u dynamickych AOP probíhá weaving a? p?i běhu aplikace. U r?znych implementací je toho dosa?eno za pomoci r?znych technik, nej?astěji je v?ak pou?íváno proxy pro ka?dy objekt, ktery vyu?ívá aspekty.

Motivace a základní koncepty

[editovat | editovat zdroj]

Aspekt je typicky rozptylen jako kód, tak?e není zcela lehké ho pochopit a udr?ovat. Aspekt je rozptylen na základě funkce (nap?íklad logování) a je rozlo?en do několika nesouvisejících funkcí, které by mohly pou?ívat jeho funkce, p?ípadně ve zcela nesouvisejících systémech, r?znych zdrojovych jazycích atd. To znamená, ?e ke změně logování m??e vy?adovat modifikaci v?ech doty?nych modul?. Aspekty nejsou “zamotané” pouze s hlavními funkcemi systému, ve kterém jsou vyjád?ené, ale i mezi sebou navzájem. Nap?íklad si p?edstavme bankovní aplikaci s koncep?ně velmi jednoduchou metodou na p?evod ?ástky z jednoho ú?tu na druhy:[1]

void transfer(Account fromAcc, Account toAcc, int amount) throws Exception {
   if (fromAcc.getBalance() < amount)
      throw new InsufficientFundsException();

   fromAcc.withdraw(amount);
   toAcc.deposit(amount);
}

Nicméně, tato metoda pro p?evod peněz mezi ú?ty je velice vzdálená reálnym bankovním aplikacím, jeliko?, kv?li bezpe?nosti, musíme ově?it, zda má aktuální u?ivatel autorizaci k provedení této operace. Musíme také uzav?ít tuto operaci do databázové transakce, abychom p?ede?li nekonzistenci dat. Zjednodu?ená verze s těmito novymi koncerny (problémy) by mohla vypadat nějak takto:

void transfer(Account fromAcc, Account toAcc, int amount, User user, Logger logger) throws Exception {
   logger.info("Transferring money…");

   if (!isUserAuthorised(user, fromAcc)) {
      logger.info("User has no permission.");
      throw new UnauthorisedUserException();
   }
  
   if (fromAcc.getBalance() < amount) {
      logger.info("Insufficient funds.");
      throw new InsufficientFundsException();
   }

   fromAcc.withdraw(amount);
   toAcc.deposit(amount);

   database.commitChanges();  // Atomic operation.

   logger.info("Transaction successful.");
}

Kód ji? není tak jednoduchy a elegantní, jeliko? jsme p?idali r?zné dal?í koncerny (problémy) k základní funkcionalitě (někdy zvané koncern obchodní logiky). Transakce, zabezpe?ení a logování jsou p?íklady pr??ezovych problém?. Nyní si p?edstavme, co se stane, kdy? najednou pot?ebujeme změnit (nap?íklad) bezpe?nostní schéma pro danou aplikaci. V sou?asné verzi programu jsou operace tykající se zabezpe?ení “rozesety” v mnoha metodách, a tak by změna vy?adovala zna?né úsilí. AOP se sna?í tento problém vy?e?it tím, ?e programátor vyjád?í pr??ezové problémy v samostatnych modulech zvanych aspekty. Aspekty mohou obsahovat advice (kód spojeny s ur?itymi body v programu) a inter-type declarations (roz?í?ení deklarace t?íd). Nap?íklad bezpe?nostní modul m??e obsahovat advice, ktery provádí bezpe?nostní kontrolu p?ed vstupem do bankovního ú?tu. Pointcut definuje dobu (join points), kdy je mo?né získat p?ístup k bankovnímu ú?tu a kód v těle advice ur?uje, jak je bezpe?nostní kontrola implementována. To je zp?sob, jak mohou byt kontrola a místo udr?ovány na jednom místě. Dobry pointcut, také m??e p?edvídat pozděj?í programové změny, tak?e pokud jiny vyvojá? vytvo?í novou metodu pro p?ístup k bankovnímu ú?tu, advice se bude vztahovat i na nové metody, p?i jejich provádění. Tak?e takto se pro vy?e uvedeny p?íklad provádí záznam v aspektu:

aspect Logger {
   void Bank.transfer(Account fromAcc, Account toAcc, int amount, User user, Logger logger)  {
      logger.info("Transferring money…");
   }

   void Bank.getMoneyBack(User user, int transactionId, Logger logger)  {
      logger.info("User requested money back.");
   }

   // Other crosscutting code.
}

Join point modely (JPM)

[editovat | editovat zdroj]

Zp?sob spolupráce aspektu s programem je definován v join point modelu (z anglického join point model). JPM definuje t?i věci: Join points - místa, do kterych je mo?né do kódu vlo?it logiku pomocí AOP Advice - kód, ktery se spou?tí v join pointu, m??e se spou?tět p?ed (before) i za (after) join pointem Pointcut - je soubor join point?, ve kterych je spu?těna stejná advice

Srovnání s jinymi programovacími paradigmaty

[editovat | editovat zdroj]

Aspekty vycházejí z objektově orientovaného programování (OOP). AOP jazyky nabízí podobné funkce jako metaobject protokoly. Aspekty úzce souvisí s programovacími koncepty jako subjekty, mixiny a delegace. Ji? od roku 1970 vyvojá?i pou?ívali formy odposlechu (interception) a záplatování (dispatch-patching), které se podobají některym ze zp?sob? implementace pro AOP, ale nikdy nebyly ozna?ovány jako cross cutting specifikace a sepsány na jednom místě. Návrhá?i zva?ovali i jiné zp?soby, jak dosáhnout odděleného kódu, jako jsou nap?íklad díl?í typy (partial types) v C#, těmto p?ístup?m v?ak chybí kvantifika?ní mechanismus, ktery umo?ňuje propojení několika join point? s jednou deklarací.

  1. Poznámka: Pro ukázky v tomto ?lánku je pou?ita syntaxe jazyka Java.
咳嗽肺疼是什么原因 脑部有结节意味着什么 传染病八项包括什么 眼底出血用什么眼药水最好 臭鱼烂虾什么意思
备孕吃什么好 杏仁有什么营养 女人眉尾有痣代表什么 hpv是什么病毒 4月7号是什么星座
过敏是什么样的图片 秋天的风像什么 梦见蛇预示着什么 为什么手术服是绿色的 ocg是什么意思
吃黑豆有什么好处和坏处 吃什么食物能养肝护肝 孩子爱流鼻血是什么原因 鱼休子是什么 皮内瘤变到底是什么意思
吃什么对心脏好hcv9jop4ns0r.cn 头皮屑多用什么洗发水效果好hcv8jop8ns2r.cn 霉菌是什么菌hcv9jop6ns8r.cn 9月30日什么星座hcv7jop7ns3r.cn 血小板分布宽度是什么意思hcv8jop3ns7r.cn
肝郁气滞吃什么药好hcv8jop5ns0r.cn 子宫平滑肌瘤什么意思hcv8jop4ns3r.cn 土字五行属什么hcv7jop4ns6r.cn 鼻腔有臭味是什么原因hcv9jop4ns9r.cn 早睡有什么好处hkuteam.com
霉菌感染什么症状hcv7jop6ns3r.cn 冠状沟有白色分泌物是什么原因96micro.com fabric是什么面料hcv9jop1ns9r.cn 什么叫奢侈hcv9jop4ns0r.cn 做免疫组化意味什么hcv7jop7ns1r.cn
眼底出血吃什么药hcv7jop6ns4r.cn 什么是绿茶女hcv8jop7ns6r.cn q1什么意思hcv8jop0ns8r.cn 喉咙痛不能吃什么东西onlinewuye.com 什么得当hcv8jop2ns8r.cn
百度