• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于活動圖與順序圖的自動代碼生成

    2021-09-06 01:48文浩,蔣建民,張仕,洪中
    軟件工程 2021年8期

    文浩,蔣建民,張仕,洪中

    摘? 要:在模型驅(qū)動開發(fā)過程中,為了減輕開發(fā)人員的負(fù)擔(dān),通常采用自動工具生成代碼框架。本文提出了一種基于活動圖與順序圖自動生成代碼框架的方法,并且基于該方法開發(fā)了原型工具。首先,給出了活動圖和順序圖的形式化表達(dá);其次,基于活動圖和順序圖模型提出了三個實現(xiàn)自動代碼生成的算法,該算法是通過活動圖來描述對象內(nèi)部的活動次序,并且利用順序圖體現(xiàn)對象之間的交互;最后,給出了一個原型工具,實現(xiàn)了模型到代碼框架的自動轉(zhuǎn)換。該工作可以確保轉(zhuǎn)換的正確性,并且提高軟件開發(fā)效率。

    關(guān)鍵詞:模型驅(qū)動開發(fā);自動代碼生成;形式化方法

    中圖分類號:TP311.5? ? ?文獻(xiàn)標(biāo)識碼:A

    Automatic Code Generation based on Activity and Sequence Diagrams

    WEN Hao1,2, JIANG Jianmin3, ZHANG Shi1, HONG Zhong1

    (1.College of Computer and Cyber Security, Fujian Normal University, Fuzhou 350117, China;

    2.Chengdu Institute of Computer Applications, Chinese Academy of Sciences, Chengdu 610041, China;

    3.College of Software Engineering, Chengdu University of Information Technology, Chengdu 610225, China)

    caswh96@foxmail.com; jjm@cuit.edu.cn; shi@fjnu.edu.cn; fjfzhz@fjnu.edu.cn

    Abstract: In the process of model-driven development, automatic tools are usually used to generate code frameworks in order to reduce the burden on developers. This paper proposes a method to automatically generate code framework based on activity diagram and sequence diagram, and a prototype tool is developed based on this method. First, this paper gives a formal expression of activity diagrams and sequence diagrams; secondly, three algorithms for realizing automatic code generation are proposed based on the activity diagram and sequence diagram. The algorithm uses activity diagrams to describe the internal activity sequence of the object and uses the sequence diagram to reflect the interaction between the objects; finally, a prototype tool is given to realize the automatic conversion from the model to the code framework. This work can ensure the correctness of the conversion and improve the efficiency of software development.

    Keywords: model-driven development; automatic code generation; formal methods

    1? ?引言(Introduction)

    在各種開發(fā)方法中,模型驅(qū)動設(shè)計(Model-Driven Design)因其合理與高效已被工業(yè)界廣泛運用[1-2]。在模型驅(qū)動設(shè)計框架下,先對系統(tǒng)進(jìn)行建模,隨后通過大量的分析與驗證對該模型進(jìn)行更新與修改,這就使得在設(shè)計的早期階段就可以對錯誤進(jìn)行檢測和糾正。統(tǒng)一建模語言(UML)就是該開發(fā)過程中最常用的一種可視化建模工具,它提供了很多不同類型的圖表,分別從不同的視點去建模系統(tǒng),比如數(shù)據(jù)、行為、交互、組件架構(gòu)等機(jī)制。

    當(dāng)開發(fā)人員用UML完成對系統(tǒng)的建模后,需要進(jìn)一步將抽象模型轉(zhuǎn)換為更具體的模型,并最終轉(zhuǎn)換為可執(zhí)行代碼。但在過去的大部分轉(zhuǎn)換過程中,由于沒有完整的自動化方法,導(dǎo)致整個過程的成本較高,并且其中的手工部分因為缺乏形式化方法的支撐,也會造成整個過程容易出錯[3]。近些年來,由于自動生成代碼領(lǐng)域的火熱,關(guān)于從UML模型生成對應(yīng)代碼的研究變得越來越多[4-5]。但遺憾的是,目前大部分的研究都是將單一的UML模型與代碼之間進(jìn)行關(guān)聯(lián),這樣的策略在一定程度上會使得生成的代碼缺失一定的實施細(xì)節(jié)。為了解決上述問題,本文選擇了UML中的兩種模型,一種是活動圖(Activity Diagram),主要用于對業(yè)務(wù)流程進(jìn)行建模;另一種是順序圖(Sequence Diagram),主要用于描述軟件的對象或者進(jìn)程間的交互行為。基于這兩種不同圖的不同視點,本文提出了一個更加完善的自動代碼生成的方法。

    我們依次給出了活動圖和順序圖模型的形式化定義,并基于兩個模型之間的關(guān)聯(lián),將模型元素與代碼語句進(jìn)行了對應(yīng),從而實現(xiàn)了代碼生成。本文給出的三個算法,則對應(yīng)到如何實現(xiàn)代碼生成的自動化或半自動化。

    2? ?活動圖和順序圖(Activity diagram and sequence diagram)

    活動圖被廣泛運用于建模工作流或模擬業(yè)務(wù)流程,它在本質(zhì)上是一種流程圖,著重表現(xiàn)從一個活動到另一個活動的控制流,而順序圖主要是用于顯示對象之間交互的圖。相比于使用單一UML模型,將活動圖與順序圖之間進(jìn)行關(guān)聯(lián)后,可以結(jié)合不同的視點以及兩種圖不同的特性,使生成的代碼框架更加完整,細(xì)節(jié)更多,并更實用。在本節(jié)中,首先給出了活動圖和順序圖的形式化定義,隨后提出了一個關(guān)聯(lián)函數(shù),用于描述活動圖與順序圖之間的關(guān)系。

    活動圖是一種運用節(jié)點和邊的組合,可視化描述活動執(zhí)行過程的UML圖,其中的節(jié)點可以分為活動節(jié)點、對象節(jié)點和控制節(jié)點。活動節(jié)點是活動圖中最主要的元素之一,它用來表示一個活動;對象節(jié)點是用來幫助定義活動中對象流的抽象活動節(jié)點;而控制節(jié)點則是一種可以協(xié)調(diào)其他節(jié)點之間流的特殊的活動節(jié)點。下面給出了一個活動圖抽象語法的定義。

    定義1:一個活動圖是一個九元組AD=

    Fn,Jn,R,Ia,F(xiàn)a>,其中:

    (1)A=AODnMnFnJnIaFa;

    (2)AO,活動節(jié)點和對象節(jié)點的集合;

    (3)Dn,選擇節(jié)點的集合;

    (4)Mn,合并節(jié)點的集合;

    (5)Fn,分叉節(jié)點的集合;

    (6)Jn,匯合節(jié)點的集合;

    (7)RA×A,活動和節(jié)點間關(guān)系的集合;

    (8)Ia,初始節(jié)點的集合;

    (9)Fa,終止節(jié)點的集合。

    對活動圖的形式化定義來自我們目前的工作[6-8]。為了簡化處理,在本文中不區(qū)分對象節(jié)點和活動節(jié)點,即將所有對象節(jié)點都視作活動節(jié)點。同樣為了方便描述,我們給出了前置集和后置集的定義,即對于任意節(jié)點xA,它的前置集和后置集可以分別表示為。x={yA|(y,x)R}和x。={yA|(x,y)R}。

    例1:圖1(a)是一個活動圖,可以表示為AD=

    Mn,F(xiàn)n,Jn,R,Ia,F(xiàn)a>,其中A={i,a,b,p,c,d,e,g,h,j,k,

    dn1,dn2,mn1,mn2,fn,jn,f},AO={a,b,p,c,d,e,g,h,j,k},Dn={dn1,dn2},Mn={mn1,mn2},F(xiàn)n={fn},Jn={jn},R={(i,a),(a,mn1),(mn1,b),(b,dn1),(dn1,p),(p,mn1),(dn1,c),(c,dn2),(dn2,d),(d,mn2),(dn2,e),(e,fn),(fn,g),(fn,h),(g,jn),(h,jn),(jn,j),(j,mn2),(mn2,k),(k,f)},Ia={i},F(xiàn)a={f}。并且可以很明顯得知,對于A中任意一個元素,比如b,可以得到。b={mn1}和b。={dn1}。

    順序圖可視化地描述了對象之間按照時間順序進(jìn)行信息交互的過程,它將交互展示為一個二維圖表,垂直維度上是一條被稱為生命線的虛線,該虛線繪制在每個對象的下面,用于體現(xiàn)時間與順序;而水平維度上主要體現(xiàn)在對象之間的信息交互,即消息的傳遞。下面給出了一個順序圖抽象語法的定義。

    定義2:一個順序圖是一個三元組SD=,其中:

    (1)S,信號的集合;

    (2)O,對象的集合;

    (3)MS×O×O,消息的集合。

    在本文中,因為只關(guān)注對象之間的交互內(nèi)容,所以在給出順序圖的形式化定義時,選擇了一種比較簡易的表達(dá)方式,該方式能更清晰地描述消息的傳遞過程。

    例2:圖1(b)是一個順序圖,可以表示為SD1=

    其中S1={c1,c2,c3,c4,c5},O1={AD,x,y},M1={(c1,AD,x),(c2,x,y),(c3,y,x),(c4,x,AD),(c5,AD,y)}。

    為了在上述活動圖與順序圖之間建立聯(lián)系,本文利用一個關(guān)聯(lián)函數(shù),將每個順序圖視為活動圖中的某一個活動節(jié)點的精化,即活動圖中的每一個活動都可以通過順序圖展開,精化后的活動圖相比于原來的活動圖具有更多的細(xì)節(jié)。

    設(shè)為活動節(jié)點的集合,為所有順序圖的集合;稱函數(shù)map:為“關(guān)聯(lián)函數(shù)”。也就是說,對于所有的xAO,都可以通過關(guān)聯(lián)函數(shù)map得到與之對應(yīng)的順序圖map(x)=,即通過一次關(guān)聯(lián)函數(shù),得到的順序圖map(x)是對活動節(jié)點x所屬的活動圖AD的一次細(xì)節(jié)填充。

    例3:圖1(a)表示的是一個活動圖AD=

    Jn,R,Ia,F(xiàn)a>,圖1(b)、圖1(c)分別表示的是兩個順序圖SD1和SD2。當(dāng)c,pAO,分別存在map(c)=SD1,map(p)=SD2,即可以將SD1和SD2視作活動節(jié)點c和p所屬的活動圖AD的細(xì)節(jié)填充,其余的活動節(jié)點保持不變。

    3? ?代碼生成規(guī)則(The rules for code generation)

    前面介紹了關(guān)聯(lián)函數(shù),建立了活動圖與順序圖之間的聯(lián)系,基于這種聯(lián)系,此部分提出了具體的代碼生成規(guī)則。首先,給出了一種代碼生成函數(shù),使活動圖和順序圖中的節(jié)點與程序語句間形成對應(yīng)關(guān)系;接著設(shè)計了三個算法,用于實現(xiàn)基于活動圖和順序圖的代碼自動生成。

    3.1? ?代碼生成函數(shù)

    把UML圖轉(zhuǎn)換成代碼框架的核心問題,就是如何使得圖形中的核心元素——節(jié)點,與代碼語句一一對應(yīng)。為了在活動圖和順序圖的節(jié)點與Java語句之間建立聯(lián)系,下面給出了一個代碼生成函數(shù)的定義。

    設(shè)是活動節(jié)點和消息的集合,是構(gòu)成Java語言的語句集合;稱函數(shù)g:為“代碼生成函數(shù)”。

    當(dāng)代碼生成函數(shù)的輸入分別為活動節(jié)點和消息時,可以得到:

    (1) xAO,x。Dn:g(x)=boolean x();

    (2) xAO,x。A\Dn:g(x)=void x();

    (3) xM,x=(s,o1,o2):g(x)=o2.s()。

    表1給出了從活動節(jié)點和消息到Java代碼的詳細(xì)對應(yīng)關(guān)系。當(dāng)代碼生成函數(shù)的輸入是活動圖的活動節(jié)點時,可以根據(jù)該活動節(jié)點的后件進(jìn)行分類:一種是當(dāng)活動節(jié)點的后件為選擇節(jié)點時,因為選擇節(jié)點需要一個布爾值的輸入,所以將該活動節(jié)點對應(yīng)的方法的返回值設(shè)置成布爾型。另一種是當(dāng)活動節(jié)點的后件為非選擇節(jié)點時,因為除了選擇節(jié)點,其他的節(jié)點并不需要其前件的輸出作為該節(jié)點的輸入,所以將該活動節(jié)點對應(yīng)的方法的返回值設(shè)置為空。當(dāng)代碼生成函數(shù)的輸入是順序圖的消息時,可以通過識別該消息的發(fā)送對象與接收對象生成對應(yīng)的方法,即該消息的接收對象執(zhí)行該消息的對應(yīng)方法。

    3.2? ?算法設(shè)計

    本文的自動代碼生成策略是,通過依次訪問活動圖中的活動節(jié)點以及各類節(jié)點之間的執(zhí)行順序來生成代碼框架中的類定義與主函數(shù)內(nèi)部的執(zhí)行邏輯,再通過識別順序圖對象之間的通信來完善方法的調(diào)用?;陉P(guān)聯(lián)函數(shù)map和代碼生成函數(shù)g,本節(jié)提出了算法1Gcd(AD,set1)、算法2Sc(AD)和算法3Gel(AD,set2,lp,AD_code),用于實現(xiàn)從活動圖自動生成代碼。

    算法1Gcd(AD,set1)用于生成代碼框架中的類定義,如圖2所示。該算法以活動圖AD和順序圖的集合為輸入,輸出該活動圖AD對應(yīng)生成的代碼AD_code。下面給出算法的具體解釋。

    第1 行是根據(jù)輸入的活動圖的名字創(chuàng)建相應(yīng)的Java包。第2—13 行則是遍歷該活動圖中的所有活動節(jié)點。其中,第3—6 行是識別當(dāng)前活動節(jié)點的對象,如果在當(dāng)前的代碼框架中沒有與該對象名相同的類,則添加對應(yīng)的類定義;第7 行是向類中添加該活動節(jié)點對應(yīng)的方法;第8—12 行是通過映射函數(shù)map尋找到set1中用于精化活動圖節(jié)點的對應(yīng)順序圖,并且識別對應(yīng)順序圖中所有的消息,生成對應(yīng)的方法調(diào)用。第14—15 行是向代碼框架中添加Main類,并且向其中添加main()方法,最后是輸出生成的Java代碼框架。

    算法1執(zhí)行完成之后,活動圖對應(yīng)的代碼框架中已經(jīng)有了類定義的部分,但一個完整的代碼框架除了類定義及方法聲明,其主函數(shù)中還應(yīng)該有具體的執(zhí)行邏輯。為了準(zhǔn)確描述活動圖中順序、選擇、循環(huán)、并發(fā)這四種不同的情況,下面分別給出了算法2Sc(AD)和算法3Gel(AD,set2,lp,AD_code),用于生成main()方法內(nèi)具體的程序執(zhí)行邏輯。

    算法2Sc(AD)是為了找出活動圖中的環(huán),識別可能會循環(huán)執(zhí)行的活動節(jié)點,如圖3所示。該算法以活動圖AD為輸入,輸出AD所有環(huán)中的活動節(jié)點的集合lp。以圖1(a)中的活動圖AD為例,算法2的輸出為lp=Sc(AD)={b,q}。下面給出該算法的具體解釋。

    第1—2 行分別定義一個集合lp和s,并且令lp和s為空。第3—18 行給出了一個深度優(yōu)先的遞歸算法,判斷DFS函數(shù)中第一個輸入的后置節(jié)點是否與該輸入的前置節(jié)點,即第二個輸入之間存在連通關(guān)系,如果存在,則將存放路徑上的所有節(jié)點的集合s賦值給集合lp。第19—22 行是遍歷活動圖中的所有選擇節(jié)點,尋找活動圖中的所有環(huán),并且依次將環(huán)中的節(jié)點存放到集合lp中。第23—24 行是取集合lp中的所有活動節(jié)點,最后輸出生成的集合lp。

    基于算法1和算法2,算法3Gel(AD,set2,lp,AD_code)可以生成一個完整的代碼框架,如圖4所示。該算法以活動圖AD保存初始節(jié)點后件的集合set2,算法2輸出的集合lp和算法1生成的代碼框架為輸入,而輸出則是對應(yīng)的更新后的代碼框架。下面給出該算法的具體解釋。

    第1 行是定義一個集合al,用于存放已經(jīng)存放的選擇節(jié)點。第2—48 行是使用深度優(yōu)先的策略,從初始節(jié)點的后置節(jié)點開始,依次訪問活動圖中的每一個節(jié)點。其中,在第3—9 行里,當(dāng)前節(jié)點為活動節(jié)點時,判斷當(dāng)前執(zhí)行的是否為主線程,如果是主線程,則在main()方法內(nèi)調(diào)用該節(jié)點對應(yīng)的方法,否則在run()方法內(nèi)進(jìn)行相同的方法調(diào)用(run()方法屬于線程類);在第10—17 行中,當(dāng)前節(jié)點為選擇節(jié)點并且該節(jié)點的后置節(jié)點屬于集合lp時,生成對應(yīng)的while語句,并且將該選擇節(jié)點存放到集合al中;在第18—19 行中,當(dāng)前節(jié)點為選擇節(jié)點并且該節(jié)點屬于集合al時,跳轉(zhuǎn)至該選擇節(jié)點的后置節(jié)點;在第20—26 行中,當(dāng)前節(jié)點為選擇節(jié)點并且該節(jié)點的后置節(jié)點不屬于集合lp時,生成對應(yīng)的if語句;在第27—28 行里,當(dāng)前節(jié)點為合并節(jié)點時,跳轉(zhuǎn)至該合并節(jié)點的后置節(jié)點;在第29—35 行中,當(dāng)前節(jié)點為分叉節(jié)點時,根據(jù)當(dāng)前節(jié)點的后置節(jié)點數(shù)減一的數(shù)量創(chuàng)建子線程,并且將子線程和主線程亂序地放入棧中;在第36—44 行里,當(dāng)前節(jié)點為匯合節(jié)點時,令棧內(nèi)位于頂部的線程出棧,如果此時的執(zhí)行線程不為主線程,則在main()方法內(nèi)調(diào)用對應(yīng)線程的join()方法(主線程等待該線程執(zhí)行完成后,再繼續(xù)執(zhí)行),然后再繼續(xù)讓棧內(nèi)的下一個線程出棧,執(zhí)行上述操作,直至棧內(nèi)為空;在第45—48 行里,當(dāng)前節(jié)點為終止節(jié)點時,跳出所有循環(huán)。第49 行是輸出最后更新完的代碼框架。

    綜上,算法1主要是根據(jù)AO和set1中的元素,生成相應(yīng)的代碼語句,其時間復(fù)雜度為O(a×n),其中a表示AO中的節(jié)點個數(shù),n表示set1中與活動節(jié)點對應(yīng)的順序圖的個數(shù)。算法2是判斷活動圖中是否有環(huán),并且將環(huán)中的活動節(jié)點取出,其時間復(fù)雜度為O(d×r),其中d表示Dn中的節(jié)點個數(shù),r表示活動圖中邊的數(shù)量,即R中的元素個數(shù)。算法3是通過遍歷活動圖中的所有節(jié)點,根據(jù)不同的情況生成對應(yīng)的執(zhí)行邏輯,其時間復(fù)雜度為O(a×r),其中a表示AO中的節(jié)點個數(shù),r表示R中的元素個數(shù)。在軟件開發(fā)的設(shè)計階段,因為UML圖是根據(jù)需求進(jìn)行繪制的,所以節(jié)點數(shù)量及圖的數(shù)量都是有限的,開發(fā)人員有充分的時間通過這三個算法生成對應(yīng)的代碼框架。

    例4:圖5中的代碼框架就是通過算法1、算法2和算法3生成的,即AD_code=Gel(AD,set2,lp,Gcd(AD,set1)),其中AD為

    圖1(a)中的活動圖,set1={map(c),map(p)},即分別對應(yīng)圖1(b)、圖1(c)中的順序圖SD1和SD2,set2={a}則是對應(yīng)活動圖AD中初始節(jié)點的后置集合,lp=Sc(AD)={b,q}表示AD中可能會循環(huán)發(fā)生的活動節(jié)點的集合。

    4? ?原型工具(Prototype tool)

    基于開源庫GoJS(https://gojs.net/latest/index.html),我們開發(fā)了原型工具codeGeneration(下載鏈接:https://pan.baidu.com/s/1Z1PzWioR2hRcdmFuwxZPMQ,提取碼:wgoc)用于實現(xiàn)UML模型到Java代碼框架的自動轉(zhuǎn)換。圖6是一個從活動圖轉(zhuǎn)換成對應(yīng)代碼框架的實例。

    5? ?結(jié)論(Conclusion)

    基于模型的自動代碼生成與一致性驗證是實現(xiàn)自動化,以及提高軟件可靠性過程中必不可少的一個環(huán)節(jié)。本文基于UML模型中的活動圖和順序圖,給出了一套完整的Java代碼自動生

    成的方法。相比于傳統(tǒng)的單模型轉(zhuǎn)換方法,我們的方法通過兩種模型間的關(guān)聯(lián),可以讓生產(chǎn)的代碼框架具有更多的細(xì)節(jié)。

    我們未來的工作主要包括兩個方面:一是基于這套自動代碼生成理論,對開發(fā)過程進(jìn)行一致性驗證;二是提出一套系統(tǒng)理論,實現(xiàn)從代碼到模型的直接轉(zhuǎn)換,并且對代碼編碼過程進(jìn)行分析,希望在轉(zhuǎn)換過程中不丟失任何細(xì)節(jié),進(jìn)一步研究涉及的一致性問題。

    參考文獻(xiàn)(References)

    [1] THOMAS A H, JOSEPH S. The embedded systems design challenge[C]//Formal Methods Europe. International Symposium on Formal Methods. Berlin: Springer, 2006:1-15.

    [2] LEE E A. What's ahead for embedded software?[J]. Computer, 2000, 33(9):18-26.

    [3] BALZER R. A 15 year perspective on automatic programming[J]. IEEE Transactions on Software Engineering, 1985(11):1257-1268.

    [4] WANG Y, TALPIN J P, BENVENISTE A, et al. A semantics of UML state-machines using synchronous pre-order transition systems[C]//IEEE ISORC. Proceedings Third IEEE International Symposium on Object-Oriented Real-Time Distributed Computing. New York: IEEE, 2000:96-103.

    [5] VAN C P, ANSGAR R, G?IRARD S ?, et al. Complete code generation from UML state machine[C]//MODELSWARD. Proceedings of the 5th International Conference on Model-Driven Engineering and Software Development. New Jersey: Wiley, 2017:208-219.

    [6] 林添榮,蔣建民.UML活動圖的一種邏輯語義[J].福建師范大學(xué)學(xué)報(自然科學(xué)版),2010,26(03):26-30,39.

    [7] 陳慧峰,余曉菲,蔣建民.UML活動圖的正確性檢測[J].軟件工程,2018,21(03):5-9,4.

    [8] CHEN H, JIANG J, HONG Z, et al. Decomposition of UML activity diagrams[J]. Software: Practice and Experience, 2017, 48(1):105-122.

    作者簡介:

    文? ?浩(1996-),男,碩士生.研究領(lǐng)域:形式化方法.

    蔣建民(1972-),男,博士,教授.研究領(lǐng)域:形式化方法.

    張? ?仕(1977-),男,博士,副教授.研究領(lǐng)域:軟件工程.

    洪? ?中(1979-),男,博士,副教授.研究領(lǐng)域:軟件工程.

    亚洲av免费高清在线观看| 不卡视频在线观看欧美| 婷婷色麻豆天堂久久| 草草在线视频免费看| 久久ye,这里只有精品| 国语对白做爰xxxⅹ性视频网站| 嘟嘟电影网在线观看| 午夜免费男女啪啪视频观看| 亚洲精品亚洲一区二区| 一级a做视频免费观看| 国语对白做爰xxxⅹ性视频网站| 蜜桃久久精品国产亚洲av| 国产伦在线观看视频一区| 亚洲精品自拍成人| 亚洲精品国产色婷婷电影| 国产人妻一区二区三区在| 真实男女啪啪啪动态图| 午夜福利在线观看免费完整高清在| 国产精品秋霞免费鲁丝片| av国产精品久久久久影院| 热re99久久精品国产66热6| 欧美变态另类bdsm刘玥| 亚洲精品久久久久久婷婷小说| av免费在线看不卡| 春色校园在线视频观看| 亚洲av成人精品一区久久| 美女脱内裤让男人舔精品视频| 一区二区av电影网| 午夜老司机福利剧场| 亚洲久久久久久中文字幕| 亚洲欧美日韩东京热| 日韩av不卡免费在线播放| 大片电影免费在线观看免费| 最近2019中文字幕mv第一页| 亚洲无线观看免费| 亚洲精品日韩av片在线观看| 天天躁日日操中文字幕| 亚洲精品国产av蜜桃| 国产成人freesex在线| 亚洲欧美精品专区久久| 精品少妇久久久久久888优播| 免费在线观看成人毛片| 国产伦在线观看视频一区| 2021天堂中文幕一二区在线观| 午夜激情久久久久久久| 精品人妻熟女av久视频| 大又大粗又爽又黄少妇毛片口| 欧美xxⅹ黑人| 欧美少妇被猛烈插入视频| 亚洲最大成人手机在线| 国产日韩欧美在线精品| 亚洲精品亚洲一区二区| 日本av手机在线免费观看| 国产69精品久久久久777片| 在线播放无遮挡| 亚洲精品亚洲一区二区| 日本av手机在线免费观看| 国产精品久久久久久精品古装| 亚洲,欧美,日韩| 日本与韩国留学比较| 听说在线观看完整版免费高清| 一级黄片播放器| 免费av观看视频| 神马国产精品三级电影在线观看| 久久影院123| 国产精品国产三级国产专区5o| 中国美白少妇内射xxxbb| 久热久热在线精品观看| 一个人看视频在线观看www免费| 中文欧美无线码| 欧美日韩视频高清一区二区三区二| 欧美丝袜亚洲另类| 国产精品国产av在线观看| 久久精品人妻少妇| 中国国产av一级| 国产精品一二三区在线看| 伦精品一区二区三区| 亚洲成人中文字幕在线播放| 午夜福利视频精品| 97在线人人人人妻| 欧美精品一区二区大全| 美女xxoo啪啪120秒动态图| 国产69精品久久久久777片| 十八禁网站网址无遮挡 | 色5月婷婷丁香| 国产精品偷伦视频观看了| 欧美性猛交╳xxx乱大交人| 美女高潮的动态| 人人妻人人爽人人添夜夜欢视频 | 免费看光身美女| 国产 一区精品| av在线播放精品| 欧美成人午夜免费资源| 精品熟女少妇av免费看| 国产成人福利小说| 干丝袜人妻中文字幕| 欧美激情国产日韩精品一区| 亚洲欧美成人综合另类久久久| 欧美成人a在线观看| 97在线人人人人妻| 男女啪啪激烈高潮av片| 国产黄片视频在线免费观看| av在线app专区| 夜夜看夜夜爽夜夜摸| 五月玫瑰六月丁香| 99热6这里只有精品| 日日摸夜夜添夜夜添av毛片| 日韩不卡一区二区三区视频在线| 亚洲最大成人手机在线| 中国美白少妇内射xxxbb| 亚洲天堂av无毛| 一个人观看的视频www高清免费观看| 高清在线视频一区二区三区| 亚洲av欧美aⅴ国产| 日韩强制内射视频| 亚洲人成网站在线播| 国产高清不卡午夜福利| 色哟哟·www| 久久久久性生活片| 成人一区二区视频在线观看| 搞女人的毛片| 日韩一区二区视频免费看| 黄色欧美视频在线观看| 亚洲av日韩在线播放| av免费观看日本| 91精品伊人久久大香线蕉| 国产综合懂色| 久久99精品国语久久久| 一区二区三区乱码不卡18| 午夜精品一区二区三区免费看| 国内少妇人妻偷人精品xxx网站| 久久影院123| 久久久久久久国产电影| 你懂的网址亚洲精品在线观看| 久久久国产一区二区| 在线免费观看不下载黄p国产| 欧美高清成人免费视频www| av网站免费在线观看视频| 各种免费的搞黄视频| 亚洲国产欧美人成| 日本爱情动作片www.在线观看| 日本爱情动作片www.在线观看| 成人鲁丝片一二三区免费| 亚洲在久久综合| 少妇人妻 视频| 免费观看的影片在线观看| 久久久久久久亚洲中文字幕| 成人亚洲精品一区在线观看 | 人体艺术视频欧美日本| 高清av免费在线| 成年免费大片在线观看| 国产av码专区亚洲av| 一边亲一边摸免费视频| 免费看日本二区| 色网站视频免费| 欧美精品国产亚洲| 日韩一区二区三区影片| 亚洲国产高清在线一区二区三| 国产成人精品婷婷| 香蕉精品网在线| 大陆偷拍与自拍| 亚洲内射少妇av| 亚洲成人一二三区av| 白带黄色成豆腐渣| 久久久久久久午夜电影| 中文字幕制服av| 午夜福利在线观看免费完整高清在| 亚洲最大成人av| 国产v大片淫在线免费观看| av福利片在线观看| 国产精品爽爽va在线观看网站| 亚洲精品国产av蜜桃| 亚洲欧美精品自产自拍| 最近中文字幕高清免费大全6| 97在线人人人人妻| 日韩欧美精品v在线| 一区二区三区乱码不卡18| 赤兔流量卡办理| 看非洲黑人一级黄片| 春色校园在线视频观看| 天天一区二区日本电影三级| 欧美精品国产亚洲| 99热这里只有精品一区| 亚洲av国产av综合av卡| 国语对白做爰xxxⅹ性视频网站| 另类亚洲欧美激情| 七月丁香在线播放| 久久精品久久久久久久性| 波野结衣二区三区在线| 舔av片在线| 直男gayav资源| 在线观看av片永久免费下载| videossex国产| 午夜免费男女啪啪视频观看| 亚洲av免费在线观看| 99热这里只有是精品在线观看| av福利片在线观看| 视频中文字幕在线观看| 日韩电影二区| 精品国产乱码久久久久久小说| 国产亚洲精品久久久com| 亚洲性久久影院| 免费电影在线观看免费观看| 蜜桃亚洲精品一区二区三区| 国产爱豆传媒在线观看| 国产在视频线精品| 久久久久精品性色| 夫妻性生交免费视频一级片| 免费大片18禁| 久久久精品免费免费高清| 日本午夜av视频| 毛片女人毛片| 久久精品国产亚洲av涩爱| 最近最新中文字幕免费大全7| 亚洲精品成人av观看孕妇| 久久久久久久久久久免费av| 亚洲av电影在线观看一区二区三区 | 美女被艹到高潮喷水动态| 亚洲熟女精品中文字幕| 一本一本综合久久| 老司机影院毛片| 男女国产视频网站| 亚洲人成网站高清观看| eeuss影院久久| 久久久久网色| 国产成人精品福利久久| 我要看日韩黄色一级片| 欧美97在线视频| 精品国产乱码久久久久久小说| 人妻少妇偷人精品九色| 成人免费观看视频高清| 久久久久久久精品精品| 亚洲人成网站在线观看播放| 亚州av有码| 国产精品伦人一区二区| 亚洲精品视频女| 王馨瑶露胸无遮挡在线观看| 麻豆成人av视频| 日韩三级伦理在线观看| 亚洲av在线观看美女高潮| 婷婷色麻豆天堂久久| 亚洲综合精品二区| 亚洲经典国产精华液单| 嫩草影院新地址| 成年女人在线观看亚洲视频 | 大又大粗又爽又黄少妇毛片口| 欧美bdsm另类| 欧美丝袜亚洲另类| 久久久亚洲精品成人影院| 国产成人免费无遮挡视频| 国产伦精品一区二区三区四那| 国产精品av视频在线免费观看| 亚洲精品第二区| 国产熟女欧美一区二区| 在线观看美女被高潮喷水网站| 国产一区有黄有色的免费视频| 五月伊人婷婷丁香| 韩国高清视频一区二区三区| 在线观看av片永久免费下载| 成年人午夜在线观看视频| .国产精品久久| 欧美性猛交╳xxx乱大交人| 亚洲在线观看片| 99热国产这里只有精品6| 亚洲精品成人av观看孕妇| 日本-黄色视频高清免费观看| 日日摸夜夜添夜夜爱| 精品一区二区三卡| 丰满人妻一区二区三区视频av| 如何舔出高潮| 亚洲欧美精品专区久久| 三级国产精品片| 午夜福利网站1000一区二区三区| 国产亚洲精品久久久com| 欧美激情久久久久久爽电影| 久久久久久久精品精品| 国产伦在线观看视频一区| 有码 亚洲区| av黄色大香蕉| 亚洲欧美成人综合另类久久久| 国产精品一二三区在线看| 日韩欧美 国产精品| 一本久久精品| 亚洲国产日韩一区二区| 午夜亚洲福利在线播放| 在线播放无遮挡| 亚洲内射少妇av| 亚洲天堂国产精品一区在线| 少妇人妻 视频| 嘟嘟电影网在线观看| 亚洲精品视频女| 国产老妇伦熟女老妇高清| av天堂中文字幕网| 午夜福利视频精品| 国产成人精品福利久久| 亚洲,一卡二卡三卡| kizo精华| 听说在线观看完整版免费高清| 一级毛片aaaaaa免费看小| 高清日韩中文字幕在线| 中文字幕亚洲精品专区| 日本午夜av视频| 国产精品一二三区在线看| 亚洲av欧美aⅴ国产| 禁无遮挡网站| 高清午夜精品一区二区三区| 成人无遮挡网站| 久久鲁丝午夜福利片| 激情 狠狠 欧美| 精品视频人人做人人爽| 大片电影免费在线观看免费| 大又大粗又爽又黄少妇毛片口| 色吧在线观看| 涩涩av久久男人的天堂| av免费在线看不卡| 国产亚洲av片在线观看秒播厂| 亚洲欧洲国产日韩| 一级av片app| 亚洲真实伦在线观看| 亚洲国产精品成人久久小说| 我的老师免费观看完整版| 欧美日韩国产mv在线观看视频 | 又大又黄又爽视频免费| 久久人人97超碰香蕉20202| 一区在线观看完整版| 久久久精品区二区三区| 一区二区三区精品91| 老司机在亚洲福利影院| a级毛片在线看网站| 国产精品熟女久久久久浪| 色网站视频免费| 丝袜美足系列| 99国产综合亚洲精品| 午夜日韩欧美国产| 女人久久www免费人成看片| 91老司机精品| 老汉色av国产亚洲站长工具| 啦啦啦在线免费观看视频4| 亚洲男人天堂网一区| 搡老乐熟女国产| 另类亚洲欧美激情| 亚洲av电影在线观看一区二区三区| av视频免费观看在线观看| 欧美中文综合在线视频| 久久毛片免费看一区二区三区| 777米奇影视久久| 午夜福利视频在线观看免费| 狂野欧美激情性xxxx| 丝袜喷水一区| 久久久久国产一级毛片高清牌| 97在线人人人人妻| 一本色道久久久久久精品综合| av在线app专区| 99久久精品国产亚洲精品| 丝袜在线中文字幕| 肉色欧美久久久久久久蜜桃| 别揉我奶头~嗯~啊~动态视频 | 亚洲成人一二三区av| 99国产综合亚洲精品| 国产片内射在线| 女的被弄到高潮叫床怎么办| 高清黄色对白视频在线免费看| 久久久久人妻精品一区果冻| 亚洲专区中文字幕在线 | 午夜福利视频在线观看免费| 精品午夜福利在线看| 搡老岳熟女国产| 最近最新中文字幕免费大全7| 精品亚洲成a人片在线观看| 少妇人妻久久综合中文| 国产精品麻豆人妻色哟哟久久| 七月丁香在线播放| 久久久国产欧美日韩av| 高清av免费在线| avwww免费| 夫妻午夜视频| 亚洲人成网站在线观看播放| 9色porny在线观看| 不卡视频在线观看欧美| 嫩草影院入口| av免费观看日本| 水蜜桃什么品种好| 90打野战视频偷拍视频| 成人三级做爰电影| 中文字幕制服av| 欧美精品人与动牲交sv欧美| 亚洲色图综合在线观看| 日韩电影二区| 国产精品久久久久久人妻精品电影 | 久久久国产一区二区| 中文字幕制服av| 日韩一本色道免费dvd| 热re99久久国产66热| 两个人免费观看高清视频| 日韩不卡一区二区三区视频在线| 最近2019中文字幕mv第一页| 黄色一级大片看看| 欧美日韩亚洲国产一区二区在线观看 | 热re99久久国产66热| 夫妻性生交免费视频一级片| 日本欧美国产在线视频| 日韩av在线免费看完整版不卡| 久热爱精品视频在线9| 欧美日韩成人在线一区二区| 欧美日韩亚洲高清精品| 亚洲国产av新网站| 国产又爽黄色视频| 国产精品欧美亚洲77777| 少妇被粗大的猛进出69影院| 亚洲国产精品一区三区| 美女高潮到喷水免费观看| 好男人视频免费观看在线| 一级毛片黄色毛片免费观看视频| 热99国产精品久久久久久7| 男的添女的下面高潮视频| 久热爱精品视频在线9| 国产精品偷伦视频观看了| 黄色 视频免费看| 欧美日韩一级在线毛片| 国产亚洲av片在线观看秒播厂| 在线观看三级黄色| 久久精品aⅴ一区二区三区四区| 久久ye,这里只有精品| 在线精品无人区一区二区三| 丝袜美足系列| 亚洲一码二码三码区别大吗| 国产精品国产三级国产专区5o| 亚洲天堂av无毛| 黑人巨大精品欧美一区二区蜜桃| 亚洲精品乱久久久久久| 久热这里只有精品99| 久久热在线av| 国产免费现黄频在线看| 国产精品嫩草影院av在线观看| 国产精品久久久久久人妻精品电影 | 你懂的网址亚洲精品在线观看| 国产老妇伦熟女老妇高清| 亚洲精品自拍成人| 女人被躁到高潮嗷嗷叫费观| 女人精品久久久久毛片| 两个人免费观看高清视频| 黄片播放在线免费| 夫妻性生交免费视频一级片| 曰老女人黄片| 汤姆久久久久久久影院中文字幕| 女人被躁到高潮嗷嗷叫费观| 十分钟在线观看高清视频www| 成年动漫av网址| 国产日韩一区二区三区精品不卡| 久久久久久久久久久免费av| 热99国产精品久久久久久7| 亚洲精品视频女| 欧美成人精品欧美一级黄| 久久久精品国产亚洲av高清涩受| 男人添女人高潮全过程视频| 亚洲情色 制服丝袜| 日韩熟女老妇一区二区性免费视频| 一本大道久久a久久精品| 交换朋友夫妻互换小说| 日韩一卡2卡3卡4卡2021年| 欧美成人午夜精品| 欧美日韩一级在线毛片| 天天躁狠狠躁夜夜躁狠狠躁| 国产精品一区二区在线不卡| 欧美激情极品国产一区二区三区| 一区二区三区乱码不卡18| av网站免费在线观看视频| 免费看av在线观看网站| 七月丁香在线播放| 午夜免费男女啪啪视频观看| 国产免费视频播放在线视频| 久久99一区二区三区| 一级黄片播放器| 久久久久精品久久久久真实原创| 欧美在线黄色| 丰满迷人的少妇在线观看| 久久久国产精品麻豆| 欧美人与性动交α欧美软件| 亚洲人成电影观看| 乱人伦中国视频| 亚洲国产中文字幕在线视频| 日韩,欧美,国产一区二区三区| 午夜91福利影院| 日韩人妻精品一区2区三区| 黄色 视频免费看| 最近最新中文字幕免费大全7| 80岁老熟妇乱子伦牲交| 91精品国产国语对白视频| 男女免费视频国产| 久久久久久免费高清国产稀缺| 性少妇av在线| 两个人免费观看高清视频| 亚洲 欧美一区二区三区| 国产av码专区亚洲av| 久热爱精品视频在线9| 免费在线观看黄色视频的| 日本欧美视频一区| 国产日韩一区二区三区精品不卡| 欧美日韩综合久久久久久| 九色亚洲精品在线播放| 99香蕉大伊视频| 天天影视国产精品| 人人妻人人添人人爽欧美一区卜| 欧美日韩一区二区视频在线观看视频在线| 免费黄色在线免费观看| 国产一区二区在线观看av| 日韩欧美一区视频在线观看| 久久97久久精品| 亚洲av日韩在线播放| 久久精品久久久久久久性| 七月丁香在线播放| 亚洲,欧美精品.| 亚洲国产最新在线播放| 亚洲精品自拍成人| 久久精品国产a三级三级三级| 国产精品三级大全| 国产欧美亚洲国产| 成年人午夜在线观看视频| av免费观看日本| 亚洲第一av免费看| 国产99久久九九免费精品| 亚洲欧美一区二区三区黑人| 啦啦啦啦在线视频资源| 狂野欧美激情性xxxx| 人人妻人人爽人人添夜夜欢视频| 国产1区2区3区精品| 夫妻性生交免费视频一级片| 亚洲精品国产av成人精品| 中文字幕另类日韩欧美亚洲嫩草| 无限看片的www在线观看| 51午夜福利影视在线观看| 欧美 亚洲 国产 日韩一| 亚洲精品aⅴ在线观看| 黄色视频在线播放观看不卡| 久久久亚洲精品成人影院| 亚洲av综合色区一区| 最近最新中文字幕免费大全7| 欧美激情 高清一区二区三区| 天天躁日日躁夜夜躁夜夜| 1024视频免费在线观看| 精品亚洲乱码少妇综合久久| 久久久久精品国产欧美久久久 | 91成人精品电影| 欧美久久黑人一区二区| 免费女性裸体啪啪无遮挡网站| 麻豆精品久久久久久蜜桃| 十分钟在线观看高清视频www| 国产伦理片在线播放av一区| 人妻人人澡人人爽人人| 国产精品成人在线| 国产又爽黄色视频| 高清不卡的av网站| 美女大奶头黄色视频| 亚洲av成人不卡在线观看播放网 | 国产成人欧美在线观看 | 欧美日韩一级在线毛片| 一区二区日韩欧美中文字幕| 精品卡一卡二卡四卡免费| 国产精品国产三级专区第一集| 精品人妻一区二区三区麻豆| 国产精品女同一区二区软件| 大话2 男鬼变身卡| 亚洲专区中文字幕在线 | videosex国产| 亚洲欧美精品综合一区二区三区| 日本vs欧美在线观看视频| 免费在线观看完整版高清| 2021少妇久久久久久久久久久| 欧美人与性动交α欧美精品济南到| 国产又爽黄色视频| 久久国产亚洲av麻豆专区| 亚洲av中文av极速乱| 国产亚洲av片在线观看秒播厂| 综合色丁香网| 国产精品久久久久久人妻精品电影 | 午夜福利一区二区在线看| 精品少妇内射三级| 超色免费av| 免费少妇av软件| 久久国产亚洲av麻豆专区| 亚洲av中文av极速乱| 波多野结衣av一区二区av| av国产精品久久久久影院| 男女边摸边吃奶| 一个人免费看片子| 高清不卡的av网站| 18在线观看网站| 在线观看一区二区三区激情| 日日爽夜夜爽网站| 男女边摸边吃奶| 亚洲国产毛片av蜜桃av| 日日摸夜夜添夜夜爱| 午夜日本视频在线| 亚洲欧美色中文字幕在线| 国产成人免费无遮挡视频| 十八禁人妻一区二区| 欧美精品高潮呻吟av久久| 高清不卡的av网站| 国产精品国产三级专区第一集| 亚洲第一av免费看| 亚洲成人手机| 国产一区二区三区av在线| 一区二区日韩欧美中文字幕| 午夜福利影视在线免费观看| 最黄视频免费看| 亚洲欧美成人精品一区二区| 五月天丁香电影| 亚洲国产av新网站| 91精品三级在线观看| 狂野欧美激情性bbbbbb| 爱豆传媒免费全集在线观看| 国产一区二区激情短视频 | 国产片特级美女逼逼视频| 国产麻豆69| 捣出白浆h1v1|