Literature
首页医源资料库在线期刊中华现代中医学杂志2007年第3卷第3期

中医化的程序设计课程教学探索

来源:《中华现代中医学杂志》
摘要:【摘要】本文介绍了中医基础理论与程序设计相结合组织程序设计课程的教学实践,重点介绍了按“中医化的程序设计培养新模式”,对学生程序设计课程教学改革的理论研究和实践探索,推出了“多元法”的程序设计课程,它为学生个人需求而设计,构建了良好的学习循环,大大提高了学生学习的自觉性和学习效率,使学生变被......

点击显示 收起

【摘要】  本文介绍了中医基础理论与程序设计相结合组织程序设计课程的教学实践,重点介绍了按“中医化的程序设计培养新模式”,对学生程序设计课程教学改革的理论研究和实践探索,推出了“多元法”的程序设计课程,它为学生个人需求而设计,构建了良好的学习循环,大大提高了学生学习的自觉性和学习效率,使学生变被动学习为主动求知。提出了“中医化的程序设计”这一值得探索的新目标。

【关键词】  程序设计;整合;阴阳


    Reform of program design teaching integrate with Chinese medical

    XIA Yun.University of  Shanghai For Science and Technology,Computer Basic Teaching,Shanghai 200093,China

    【Abstract】  The article introduces the practices of program design teaching integrate with Chinese medical. The article makes great emphases on the introduction of theoretical and practical research on “Research and Practice of Traditional Programmer Talent Training Mode”. Computer course structure is pluralism. Computer course program is designed to suit your individual needs and requirements. In the end, the article discusses the necessity that bringing Chinese medical informatics into program design teaching. The conclusion is drawn that Chinese medical informatics should be required course of program design teaching.

    【Key words】  program design;conformity;yin and yang

    中医药学是中国的特色医学,从历史渊源和文化背景上看,它既是古代人民医疗实践经验的总结和概括,更是中国灿烂的先秦百家文化的集中体现和创造性成果。2000多年来,中医药为中华民族的繁衍生息和健康做出了不可磨灭的贡献,中医有极大的潜质,每个中华儿女都应关注中医的继承、发展和创新,而吸纳其他学科的手段,延伸望、闻、问、切,必将推动中医药的创新发展。

    上海理工大学计算机基础教研室与上海中医药大学计算机中心联合研究中医学生的信息素养培养问题,认为中医学生具有一定的信息素养便能承担起中医的继承、发展和创新之重任,在研究中发现将中医基础理论整合到程序设计的教学中,解决了中医学生的程序设计入门难问题,开拓了学生的思路,使学生了解中医,展示了中医原创性的优势,使学生学会吸纳其他学科的手段认识中医,为学生发展和创新奠定了基础。同时,“多元化”的程序设计课程大大激发了学生的学习自觉性,我们在教学实践中发现“中医化的程序设计”提高了学生的学习效率,推动了信息素养课程的教学改革,这将成为中医学生信息化教育的切入点,根据上述研究结果整理成《中医化的程序设计课程教学探索》一文,并以此文为基础,进一步加强两校合作,继续探索中医与信息技术的整合,探索中医的继承、发展和创新之道。

    1  中医的基础理论

    中医学是中华祖先几千年来与疾病作斗争中不断创造、不断发展而积累起来的一门科学,它既有精湛完整的理论体系,又有丰富的实践知识,是祖国文化遗产中的一个伟大宝库。中医理论的要点是“辨证施治”[1]。辨证,就是医生用诊察疾病的方法,了解病情,找出原因,辨明疾病的性质;施治,就是根据辨证所得的结果,定出相应的治疗方法。中医“阴阳五行”[2]、“天人相应”理论体系不同于现代科学。它大致可分三个方面。

    1.1  诊察疾病  中医用望、闻、问、切(简称四诊)的方法,对病人和疾病进行调查和研究。将得到的各方面材料,经过科学的分析、综合,得出正确的诊断,为“辨证施治”提供依据。

    1.1.1  望诊  就是医生用眼睛观察病人的神 (精神)、色(气色)、形态,以及对面色、舌质、舌苔和全身各部分出现的异常现象进行观察的一种方法,是医生见到病人的一个初步印象。

    1.1.2  闻诊  就是医生用听觉来听取病人所发出来的各种声音,用嗅觉来辨别病人口腔和排出物所发出的气味,作为诊察疾病的手段之一。

    1.1.3  问诊  通过与病人或病人家属的对话,对病人的病情进行一番了解工作,了解病人自觉症状和发病时间,病情发展过程,已经治疗情况以及工作环境、生活习惯、职业、精神状况、病史等情况。

    1.1.4  切诊  包括脉诊和触诊两个方面。医生用手指头在病人手腕上摸脉以了解脉搏的快慢及其他异常的感觉,叫脉诊;用手摸病人胸腹和四肢等地方,诊察温凉、疼痛等反应的,称为触诊。

    1.2  辨证疾病  中医学对疾病的诊察和认识过程,称为辨证。辨证的方法主要有以下三个方面。

    1.2.1  脏腑辨证  就是根据脏腑(一般称五脏六腑),有病时脏腑表现一些症状,对脏腑症状进行分析、归纳的一种方法称为脏腑辨证。中医学关于脏腑的概念,所指范围较广,不仅仅限于实质器官,它把身体的全部功能、疾病的病理变化及其症状表现都归属于脏腑。

    1.2.2  病因辨证  病因,就是引起疾病发生的原因。不同病因,可以引起不同的病症。病因辨证,就是根据不同病因来分析、归纳证候的一种方法。

    1.2.3  八纲辨证  就是通过四诊把诊察到的错综复杂的临床表现联系起来,加以具体分析,然后归纳为八个方面的证候。八纲具体是指表、里、寒、热、虚、实、阴、阳,它们用以辨别和概括疾病的性质、病变部位、肌体抗病能力的强弱和病势的盛衰。

    1.3  治疗疾病  就是以诊察和辨证所获得的充分材料为依据,根据疾病的具体情况,有什么证候,证候有何变化,就采取哪种治疗方法。中医治疗疾病的方法极其丰富,除内服药外,还有外用药及针灸、按摩、正骨、拔罐、气功等多种疗法。

    1.3.1  治疗特点  (1)整体观念,看到疾病和全身的关系;(2)重视内因,根据病情,分别采用扶正以祛邪或扶正兼祛邪的方法;(3)治病求本,从疾病的复杂现象中找出疾病的本质,治疗时要“有的放矢,击中要害”;(4)主次缓急,“急则治其标,缓则治其本”;(5)机动灵活,因地、因时、因人施治;(6)决定因素是人,即医生和病人的积极性都要调动起来,密切合作共同向疾病作斗争。

    1.3.2  内服中药治疗疾病的方法  汗、吐、下、和、温、清、消、补八法。   (1)发汗法:也称解表法、解肌法,是用药物开泄毛孔,驱逐病邪的一种方法;   (2)催吐法:是利用药物能引起呕吐的作用,引导病邪或有害物质从口中吐出的一种治疗方法;   (3)泻下法:也叫攻下法,是利用药物有攻下、润下的作用,以清除体内积滞的一种治疗方法;   (4)和解法:是用药物的疏通、和解的作用,以消除疾病的一种方法;   (5)温里法:也叫祛寒法,用温性或热性的药物来达到振奋阳气、祛除寒邪、温中回阳等目的的一种治疗方法;   (6)清热法:也叫泻火法、降火法,是用寒凉性药来治疗热性病的一种方法;   (7)消导法:是用消散破积的药物,以消散体内气滞、血瘀、血滞、食积、肿块等病症的一种治疗方法;   (8)补益法:也叫滋补法、补养法、扶正法,是利用有补养作用的药物,以增强人体的抗病能力,达到扶正祛邪的一种治疗方法,适用于一切虚证。

    2  程序设计的基础

    2.1  软件的相关概念  计算机系统由硬件系统和软件系统两大部分组成,计算机神奇的功能是在软件的“指挥”下创造出来的。软件是各种程序和有关资料的总称。程序则是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合,是人们求解问题的逻辑思维活动的代码化描述。程序的最重要的目的是:便于阅读、交流。

    Roger S. Pressman 认为:“计算机软件已经成为一种驱动力。它是进行商业决策的引擎;它是现代科学研究和工程问题寻求解答的基础;它也是鉴别现代产品和服务的关键因素。它被嵌入在各类系统中:交通、医疗、电信、军事、工业生产过程、娱乐、办公、……难以穷举。软件在现代社会中确实是必不可少的。而我们已进入21世纪,软件将成为从基础教育到基因工程的所有领域新进展的驱动器。”

    现在所使用的计算机,大部分都被称为“冯·若依曼”型计算机,所谓“冯·若依曼”型计算机的基本原理就是程序存储、程序执行。计算机只是一个电子设备,它那么神通广大,被誉为“电脑”而无所不能,并不是它天生奇才,而是因为有了程序在指挥控制它的运行,所以,程序才是计算机真正的“灵魂”,没有程序的计算机只是一堆废铁,它不能做任何事情。

    如何赋予计算机“灵魂”,让它按照我们设想的要求去执行操作,去完成任务,这就是程序设计。计算机之所以能够“聪明”地工作是因为它有一个聪明的“灵魂”程序在指挥控制它。而程序又是由一系列指令构成的,不同的指令构成了不同的程序,完成不同的任务。

    在谈到指令这一概念时,必须强调:计算机每执行一条指令,只是完成了一个基本操作,一系列的指令构成了一系列的操作,这才是程序所完成的任务。所以,也有这样一句话:程序是一系列相关指令的集合。既然一条指令执行一个基本操作,那么,计算机为了有所适从就必须从指令中得到如下信息:(1)要执行的是什么类型的操作;(2)被操作的数据在何处;(3)操作后的结果放在何处。

    指令中是如何给出这些信息的呢通常一条指令被分为“操作码”和“操作数”两部分。前者用于说明操作类型,后者则用于说明操作数据的存储位置(地址)。还要指出的是,正如前面所说程序是由一系列相关指令构成,因此,当计算机执行当前指令的时候,必须了解下一条指令所存放的位置(指令的地址),这一任务在计算机中由指令计数器(PC)完成。

    所谓指令,是计算机硬件能够识别并可直接执行的操作命令,一台计算机中所有能够被识别的指令的集合就称为这台计算机的指令集,或称为“指令系统”。

    如果计算机硬件不同,那么它能识别的指令也就不同,所以我们说:指令系统是“面向机器”的。换一种不同类型的计算机,也许就意味着必须换一种指令系统。

    2.2  程序设计工具与方法  高级语言是一种使用自然语言,不依赖于具体的机器而只是面向要解决的问题的程序设计语言。

    下面这段代码是考试自动阅卷系统中的程序片段:

    ……  

    ***********用读二进制文件方法读出考盘“考生信息.wei”文件中的姓名和准考证

    If fsox.FileExists(“考生信息.WEI”) Then’若考生信息文件存在

    Open “a:考生信息.wei” For Binary As #1

    Seek #1, 355

    Get #1, 355, xh

    Seek #1, 366

    Get #1, 366, mz

    Close #1

    If Trim(xh) <> “” Then

    kszkz.Caption = xh

    ksname.Caption = “待查” ’ mz ’RTrim(Mid(mz, 1, 4)

    MsgBox “阅卷系统已从考生信息文件中查到该生准考证号”, 64, “信息”

    Else

    MsgBox “这是一张空盘,考生未进行登录  ”, 64, “注意”

    Exit Sub

    End If

    Else

    MsgBox “这张软盘不是考试专用盘,请核对!”, 64, “注意”

    Exit Sub

    End If

    ……

    上述这个程序片段,在用高级语言编写的程序代码中,大量使用了诸如If(如果)怎样怎样、Then(那么)如何、Else(否则)怎样的自然语言,如果要显示一个信息对话框,则可以在程序中给出诸如MsgBox的命令语句。这大大方便了程序的编写、测试。而且,其更大的好处还在于,高级语言是“面向问题”的,使用高级语言编写的程序,具有很好的通用性和可移植性。当然,使用高级语言编写的程序,需要经过专门的翻译过程才能被计算机识别和执行。

    程序 = 数据结构 + 算法

    这个公式从另一个角度诠释了程序的意义,它从两方面说明了程序的概念,首先,计算机处理的对象是数据,被处理的数据或多或少,或简单或复杂,不同的数据存在不同的类型,由于在任何问题中数据元素都不会是孤立存在的,不同的数据之间必然还存在着相互关系,这种数据之间的关系就被称之为数据结构,譬如数据库、表单、元组、属性、属性值等等之间相互关系的数据结构。

    其次,这个定义公式又说明了在程序中算法的重要性,算法可以通俗地理解为解决问题的方法,一个好的算法可以大大提高解决问题的效率。对于程序而言,一个好的数据结构加上好的算法,所产生的必然是一个好的程序。

    随着计算机技术的发展,对于一个好的程序必须具有良好的程序结构、可读性、易维护、模块化、可靠性强等一系列要求,编程也从手工作坊式提到了软件工程的高度。清晰的程序结构、良好可读性、易维护、模块化、可靠性强的要求。就是“结构化程序设计”。 “结构化程序设计”有两个基本原则。

    2.2.1  自顶向下、逐步细化  结构化的程序设计方法强调分解过程,将一个的大功能(系统)分解为若干个小功能(模块),关心的是程序如何去实现这些功能。

    譬如,当软件设计人员承接了某医院的项目委托,开发一个“门、急诊信息处理系统”后,他首先要做的是在了解整个系统的功能需求的基础上,将整个项目分解为若干个子系统,然后又将各个子系统分解为若干个功能子模块。这样就将一个大的任务分解为了一个个小任务,分别由各个模块来完成。各个模块之间可以互相调用,这样编出来的程序结构清晰,也易于维护和扩展功能。如图1所示[3]。

    图12.2.2  程序的三种基本结构  为了达到清晰的程序结构的要求,结构化程序设计要求编写的程序由三种基本的控制结构组成,它们是:(1)顺序结构;(2)分支结构(选择结构);(3)循环结构。如果一个算法是由上述三种基本结构表示的,那么,该算法就是结构化的算法。必须注意,在结构化程序设计中,要尽可能地避免使用诸如 goto 等强制性跳转语句。

    与面向过程的程序设计方法不同,面向对象的程序设计方法强调分解实际的事物,所有的工作(功能)由对象来完成,程序关注的重点是这些对象要做什么。

    在面向对象的程序设计方法中,关注的不再是程序的层次性、各个模块的从属性,它将整个工作交由各个对象来分别完成,当某个对象被触发后,系统就得到了某个消息,然后就去执行相应的事件过程[3]。所以,在“面向对象的程序设计”中,程序又被赋予了这样的定义:程序 = 对象 + 消息。见图2。 图2    在图2程序实例中,有三个对象,分别是一个窗体对象和两个按钮对象(除了在本例中使用到的这些控件对象外,根据程序的需要,在VB中还经常会用到标签控件Label对象、文本框控件TextBox对象、框架控件Frame对象、单选按钮控件OptionButton对象、复选按钮控件CheckBox对象等等)。

    本例中的三个对象分别由以下的程序代码控制,这些程序代码表示了三个事件过程。

    Private Sub Command1_Click() ’当按钮1被单击时触发的事件过程

    Print “Shanghai”

    End Sub

    Private Sub Command2_Click() ’当按钮2被单击时触发的事件过程

    End

    End Sub

    Private Sub Form_DblClick()     ’当窗体被双击时触发的事件过程

    Print “Beijing”

    End Sub

    每个对象都有其各自的属性,例如在本例中,按钮1的Caption属性值为“演示”,按钮2的Caption属性值为“结束”,而窗体Form1的Font(字体)属性值为二号。

    当程序运行后单击“演示”按钮后,就得到了一个事件驱动,即按钮1对象发生了一个Click事件(单击),程序立即启动相应的事件过程,即执行:

    Private Sub Command1_Click() ’当按钮1被单击时触发的事件过程

    Print “Shanghai”

    End Sub

    这段代码,执行结果为向窗体发出了一个“消息”,即在窗体Form1上显示“Shanghai”,同理,当双击窗体时,发生了Form_DblClick事件(双击),立即就会启动另一个事件过程,执行结果是在窗体上显示“Beijing”,而当单击“结束”按钮时,又发生了按钮2被Click的事件,因此,程序执行End(结束)的事件过程。

    3  用中医理论组织程序设计的教学

    3.1  将“阴阳”整合到计算机系统中  学生尤其是中医药专业的学生对学习程序存在着一种莫名的害怕和担心,总认为这是一个很难学习的部分,“未战先怯”的心理会对学习带来不利的影响甚至放弃,所以,首先就是要打破这种认为程序很陌生很难学的“心理暗示”。

    用中医理论组织程序设计的教学则容易被中医药专业的学生接受,能帮助他们打破程序难学的“心理暗示”。我们用中医“阴阳”解析计算机系统,张介宾认为,“天地之道,以阴阳二气而造化万物;人生之理,以阴阳二气而长养百骸。”计算机系统中的阴就是计算机软件,阳就是计算机硬件,“阳不是阴,阴也不是阳,这表明阴阳是对立的;但同时阴阳又是相互依存、相互包含的。没有阴就没有阳,没有阳也就没有阴”。用上述《系辞上传》解析计算机系统中的软、硬件关系对于中医药专业的学生而言既理解了计算机系统又加深对中医“阴阳五行”的理解。

    3.2  结构化的程序设计与中医理论的联想  程序 = 数据结构 + 算法则用对病人的诊断=望、闻、问、切+八纲解释,学生感到十分熟悉,并很快理解了基本数据类型和构造类型,他们将整型、实型、字符型这些基本数据类型与望、闻、问、切中的基本观察方法联想,将数组、结构体等构造类型与望、闻、问、切中的特殊观察方法联想,从而得出“患常见病的病人的诊断”用望、闻、问、切中的基本观察方法,即:简单数学运算问题的程序用到的变量是基本数据类型,统计、管理问题的程序中出现的变量是构造类型。

    结构化的程序设计方法强调分解过程,将一个大功能(系统)分解为若干个小功能(模块),怎样分解呢这是初学者首先遇到的问题,从程序设计的理论而言则:先从整体考虑问题,将原始问题分解成逻辑上相互独立的多个部分;一一实现分解后的各部分,将上述实现组装成原始问题的解。这里我们引入“辨证疾病”,将整体问题解释成疾病,要求学生按“辨证疾病”方法将原始问题分解成逻辑上相互独立的多个部分,并辅以案例,学生很快就掌握了。

    3.3  问题驱动与教学组织  为了讲解逻辑判断,我们使用下列问题驱动,即:哪个医生诊断正确

    某医院有四位实习医生对一位病人进行诊断,带实习的主任医生问这四位哪个医生诊断是正确。

    A说:不是我。

    B说:是C。

    C说:是D。

    D说:他胡说。

    已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出诊断正确的实习医生。

    请学生将四个实习医生说的四句话写成关系表达式。在声明变量时,让thisman表示要找的实习医生,定义它是字符变量。

    A说:不是我。写成(thisman!=‘A’)

    B说:是C。   写成(thisman==‘C’)

    C说:是D。   写成(thisman==‘D’)

    D说:他胡说。写成(thisman!=‘D’)

    启发学生用诊察疾病的方法,了解“病情”,找出“原因”,即:

    如何找到该人,一定是“先假设该实习医生是诊断正确者,然后到每句话中去测试看有几句是真话”。“有三句是真话就确定是该人,否则换下一人再试”。

    比如,先假定是A实习医生,让

    thisman=‘A’; 代入到四句话中

    A说:thisman!=‘A’; ‘A’!=‘A’ 假,值为0。

    B说:thisman==‘C’; ‘A’==‘C’ 假,值为0。

    C说:thisman==‘D’; ‘A’==‘D’ 假,值为0。

    D说:thisman!=‘D’; ‘A’!=‘D’ 真,值为1。

    显然,不是‘A’,再试B同学,让thisman=‘B’; 代入到四句话中,

    A说:thisman!=‘A’; ‘B’!=‘A’ 真,值为1。

    B说:thisman==‘C’; ‘B’==‘C’ 假,值为0。

    C说:thisman==‘D’; ‘B’==‘D’ 假,值为0。

    D说:thisman!=‘D’; ‘B’!=‘D’ 真,值为1。

    显然,不是‘B’所为,再试C同学,让thisman=‘C’; 代入到四句话中

    A说:thisman!=‘A’; ‘C’!=‘A’ 真,值为1。

    B说:thisman==‘C’; ‘C’==‘C’ 真,值为1。

    C说:thisman==‘D’; ‘C’==‘D’ 假,值为0。

    D说:thisman!=‘D’; ‘C’!=‘D’ 真,值为1。

    显然,就是‘C’ 为诊断正确者(四个关系表达式值之和为3),这时,我们可以理出头绪,要用所谓枚举法,一个人一个人地去试,四句话中有三句为真,该人即所求。

    4  中医化的程序设计教学效果

    4.1  知识点分布与正确率(中医化教学/非中医化教学)

    4.1.1  基本概念、量与表达式  (1)标识符定义正确率: 68.65%/50.25%;(2)变量定义正确率:64.91%/45.24%;(3)全局变量与局部变量正确率:98.14%/50.15%;(4)算术运算正确率:68.14%/51.35%;(5)逻辑表达式正确率:95.06%/49.75%;(6)枚举类型正确率:56.39%/35.88%;(7)字符基本表示方法正确率:27.60%/7.15%;(8)递增递减表达式正确率:93.36%/50.66%;(9)静态数据对象正确率:52.30%/36.77%。

    4.1.2  程序控制结构  (1)循环迭代正确率:66.27%/36.27%;(2)复杂分支结构正确率:63.88%/37.77%;

    4.1.3  函数与算法  (1)主函数正确率:39.86%/16.77%;(2)算法概念正确率69.34%/36.97%;(3)函数参数正确率:51.28%/46.77%;(4)函数调用正确率:95.57%/56.79%;(5)递归函数概念正确率:76.49%/36.99%;(6)递归函数设计正确率:95.40%/38.77%。(7)算法设计正确率:48.04%/36.37%;(8)算法时间复杂度正确率:76.83%/36.38%。

    4.1.4  复合数据结构  数组、字符串、结构体与联合体。(1)数组概念正确率:79.22%/34.74%;(2)字符串赋值与初始化正确率:72.57%/33.73%;(3)结构体深入理解正确率:39.52%/35.72%;(4)结构体与联合体使用正确率:60.14%/26.64%;(5)数组作为函数参数正确率:74.28%/36.65%;(6)程序理解(包含多种控制和数据结构)正确率:82.96%/36.87%。

    4.1.5  指针  (1)指针概念正确率:84.84%/24.77%;(2)指针算术运算正确率:59.11%/26.85%;(3)字符指针正确率:52.81%/36.24%;(4)指针与函数的关系正确率:64.40%/46.13%;(5)动态存储分配正确率:83.99%/66.27%。

    4.1.6  文件与数据存储  (1)文件概念正确率:63.71%/31.74%;(2)文件操作正确率:46.00%/25.46%。

    4.2  学习效果分析  (1)主要知识点难度顺序:文件 > 结构体与联合体 > 字符串 > 函数与算法 > 指针 > 数组;(2)实践中未使用的基本知识点难以掌握;(3)应该进一步强调实践动手能力。

    5  结论

    5.1  教学目标  (1)整合中医基础理论借助程序设计的知识载体,传授基本问题的求解过程和基本思路。(2)依托中医基础理论建立算法意识,培养良好的思维习惯。(3)从学科方法论上打基础,培养计算思维能力和分析问题、解决问题的能力。

    5.2  学科教育走内涵发展道路  见图3。

    5.3  教学改革的思路  见图4。 图3

    5.4  指导思想  (1)立足改革,人的认识要随着时代的前进而不断深化,在新的形势和环境下,教学要突破传统观念和传统模式,也要追求高效和完美,以培养高素质有创造精神的人才为目标。(2)学生是教学的主体,安排教学首先须考虑培养目标、学生的认知规律和学习特点。教学的每一个环节都要顾及学生的实际情况,有利于调动学生学习的积极性,引导学生主动学习,强化实践。(3)这门课主张程序设计是高强度的脑力劳动,不是听会的,也不是看会的,而是练会的。这可能是与以往的教学安排最大的不同之处。

 

【参考文献】
  1 秦伯未.中医入门.北京:人民卫生出版社,2006,5.

2 司富春.中医理论基础.北京:人民军医出版社,2005,252.

3 上海市教育委员会.计算机应用基础教程.上海:华东师范大学出版社,2002,252.


作者单位:200093 上海,上海理工大学计算机基础教研室

作者: 夏耘 2008-5-30
医学百科App—中西医基础知识学习工具
  • 相关内容
  • 近期更新
  • 热文榜
  • 医学百科App—健康测试工具