面向对象程序设计,实验报告

合集下载

python掌握面向对象的程序设计实验报告

python掌握面向对象的程序设计实验报告

python掌握面向对象的程序设计实验报告Python掌握面向对象的程序设计实验报告摘要:本实验报告旨在介绍Python编程语言中面向对象的程序设计。

首先,我们将讨论什么是面向对象编程以及它的优点。

然后,我们将介绍类和对象的概念,并展示如何创建和使用它们。

接下来,我们将讨论继承、多态和封装等面向对象编程的重要概念,并提供相关示例。

最后,我们将总结本次实验的主要内容。

一、介绍面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和操作数据的方法封装到一个独立的实体中,这个实体称为对象。

对象可以通过定义特定类型的类来创建。

Python是一种支持面向对象编程的高级编程语言,它提供了丰富的面向对象编程机制,使得程序的开发和维护更加高效和可靠。

面向对象编程的优点:1. 代码复用:面向对象编程允许我们创建可重用的代码模块,从而提高了代码的复用性和可维护性。

我们可以通过创建类和对象来定义通用的行为和属性,然后在不同的项目中使用它们。

2. 模块化设计:通过将大型程序分解为小型的、独立的对象,我们可以更好地组织和管理代码。

这种模块化的设计使得程序可以被分割为更小的部分进行开发,并且每个部分可以独立测试和调试。

3. 可扩展性:面向对象编程提供了一种灵活的方式来扩展和修改代码。

我们可以通过继承和多态等机制来添加新的功能或修改现有的功能,而不需要修改原始代码。

4. 可理解性:面向对象编程使得代码更易于理解和阅读。

由于对象的行为和属性都被封装在类中,我们可以通过查看类的定义来理解对象的行为和属性。

二、类和对象在Python中,类是一种用于定义对象的模板。

类定义了对象的属性和行为。

对象是类的实例,它具有类所定义的属性和行为。

1. 类的定义在Python中,我们使用class关键字来定义类。

类的定义可以包含属性和方法。

属性是对象的状态,方法是对象的行为。

示例代码:pythonclass Person:def __init__(self, name, age): # 初始化方法 = nameself.age = agedef say_hello(self): # 方法print("Hello, my name is {} and I am {} yearsold.".format(, self.age))在上面的示例中,我们定义了一个名为Person的类。

面向对象程序设计-试验报告

面向对象程序设计-试验报告

《面向对象程序设计》实验报告一.实验目的与要求1.学习类与对象的定义。

2.掌握类与对象的使用方法。

3.学习类与对象的声明。

4.学习数据成员与成员函数的访问方式。

5.理解构造函数和析构函数的定义与执行过程。

6.学会构造函数的重载方法。

二.实验准备与内容1.可以定义出一个类,并且在程序中创建一个该类的对象。

2.实现类的定义,借助VC++的方法建立一个新的类。

3.体现出构造函数和析构函数的调用。

4.重载构造函数。

5.为了提高对相关知识的综合应用能力,编写一个较为复杂的类和对象的应用程序。

三.实验设计(分析)1.建立一个空的工程chap2。

2.在工程chap2中,建立一个源程序文件,在此文件中建立一个新的类。

将新建的类命名为Rect。

//--------------------------------------------------------------------------------------------------class Rect{public:int Area_int();double Area_double();Rect(double1, doublew);Rect(int 1,int w);virtual ~Rect();private:int nLength;int nWidth;double dLength;double dWidth;};//--------------------------------------------------------------------------------------------------3.向Rect类中添加数据成员及成员函数,并完善成员函数功能。

如设计一个Area_int()函数,计算机边长为整形的长方形的面积;设计一个Area_double()函数,计算机边长为double的长方形的面积。

4.重载构造函数。

一种构造函数用整形变量记录长方形的长和宽,另一种构造函数用double型记录。

面向对象程序设计实验报告

面向对象程序设计实验报告

面向对象程序设计实验报告实验一类的定义与使用实验目的:熟悉面向对象程序设计的基本概念和语法,掌握类的定义与使用的方法。

实验器材:计算机、编程软件实验过程:1. 类的定义类是面向对象程序设计的基本单元,是一种自定义数据类型。

在本次实验中,我们以学生(Student)类为例进行讲解。

在定义一个类时,一般需要明确以下几个方面的内容:- 类的名称:使用合适的命名规范,如首字母大写的驼峰式命名法;- 类的属性:表示类的特征或状态,用变量来表示;- 类的方法:表示类的行为或功能,用函数来表示。

示例代码:```pythonclass Student:# 定义类的属性name = ""age = 0gender = ""# 定义类的方法def study(self):print( + "正在学习")```2. 类的使用定义好类后,我们可以创建该类的实例,即对象,通过对象来调用类的属性和方法。

示例代码:```python# 创建对象s1 = Student()# 调用对象的属性 = "张三"s1.age = 18s1.gender = "男"# 调用对象的方法s1.study() # 输出:张三正在学习```在类的使用过程中,还可以通过构造函数(__init__方法)来初始化对象的属性,以及通过访问控制修饰符(public、private、protected)来控制属性或方法的访问权限。

实验总结:通过本次实验,我们学习了面向对象程序设计的基本概念和语法,掌握了类的定义与使用的方法。

在程序设计中,合理地定义和使用类,可以提高代码的可读性、可维护性和可重用性。

在今后的学习和实践中,我们应该注重对面向对象的思考和运用,努力提升自己的编程能力。

面向对象设计_实验报告

面向对象设计_实验报告

一、实验目的1. 理解面向对象设计的基本概念和原则;2. 掌握面向对象设计的常用方法和技术;3. 学会运用面向对象设计方法进行软件系统设计和实现;4. 提高软件设计能力和编程能力。

二、实验环境1. 操作系统:Windows 102. 开发工具:Eclipse IDE3. 编程语言:Java三、实验内容本次实验主要围绕面向对象设计进行,包括以下内容:1. 面向对象设计的基本概念和原则;2. 类的设计与实现;3. 继承与多态的应用;4. 设计模式的应用;5. 软件系统设计与实现。

四、实验步骤1. 面向对象设计的基本概念和原则(1)面向对象设计的基本概念:面向对象设计是一种软件开发方法,它将问题域中的对象作为设计的基本单元,以对象为核心进行系统设计。

(2)面向对象设计的基本原则:封装、继承、多态。

2. 类的设计与实现(1)定义类:根据问题域中的对象,定义相应的类。

(2)实现类:为类添加属性和方法,实现类的功能。

3. 继承与多态的应用(1)继承:通过继承,可以复用已有的类的设计和实现,提高代码的复用性。

(2)多态:多态是面向对象设计的一个重要特性,它可以实现代码的灵活性和扩展性。

4. 设计模式的应用(1)单例模式:确保一个类只有一个实例,并提供一个全局访问点。

(2)工厂模式:用于创建对象,而不直接指定对象的具体类型。

(3)观察者模式:当一个对象的状态发生变化时,其他依赖于该对象的对象会得到通知。

5. 软件系统设计与实现(1)需求分析:分析问题域,确定软件系统的功能和性能要求。

(2)系统设计:根据需求分析,设计软件系统的架构和模块。

(3)编码实现:根据系统设计,实现软件系统的功能。

(4)测试与调试:对软件系统进行测试,确保其功能符合预期。

五、实验结果与分析1. 实验结果本次实验完成了面向对象设计的基本概念、类的设计与实现、继承与多态的应用、设计模式的应用以及软件系统设计与实现等内容。

通过实验,掌握了面向对象设计的方法和技术,提高了软件设计能力和编程能力。

C++面向对象程序设计》实验报告

C++面向对象程序设计》实验报告

《C++面向对象程序设计》实验内容实验1 C++程序设计初步1.实验目的(1)了解在C++编译系统(Visual C++6.0)上如何编辑、编译、连接和运行一个C++程序。

(2)通过运行简单的C++程序, 初步了解C++源程序的结构和特点。

(3)掌握简单C++程序的编写和调试方法。

(4)掌握重载函数的定义方法。

(5)能正确使用引用型变量。

2.实验内容和步骤(1)在Visual C++环境下编译和运行C++程序①先进入Visual C++6.0环境。

②在自己指定的子目录中建立一个名为test.cpp的新文件。

③从键盘输入以下程序int main(){int a,b;c=a+b;cout>> “a+b=”>>a+b;}选择Build→Compile test.cpp命令, 对此源程序进行编译。

观察和分析编译信息。

⑤根据编译信息指出的错误, 修改程序。

再进行编译, 如果还有错, 再重复此过程, 直到编译不出错为止。

⑥选择Build→Build test.exe命令, 对程序进行连接, 如果不出错, 就会生成可执行程序test.exe。

⑦选择Build→Execute test.exe命令, 执行可执行程序test.exe。

观察屏幕的变化。

在输出窗口应显示程序运行结果。

⑧分析结果是否正确, 如果不正确或认为输出格式不理想, 可以修改程序, 然后重新执行以上④和⑧步骤。

改过后的程序:#include<iostream>using namespace std;int add(int x,int y){int z;z=x+y;return(z);}int main(){int a,b,c;cin>>a>>b;c=add(a,b);cout<<"a+b="<<c<<endl;return 0;}实验2 C++对C的扩充(2)编一个程序, 用来求2个或3个正整数中的最大数。

面向对象程序设计的实验报告

面向对象程序设计的实验报告

面向对象程序设计实验报告学号:4100118姓名:邢启晖提交日期:2012-10-13成绩:东北大学秦皇岛分校实验一类与对象一、实验目的1.掌握类的声明。

2.掌握对象的创建。

3.掌握方法的定义和调用。

4.掌握构造函数的使用。

二、实验内容1.编程创建一个Box类,在其中定义三个变量表示一个立方体的长、宽和高,再定义一个方法setDemo对这三个变量进行初始化,然后定义一个方法求立方体的体积。

创建一个对象,求给定尺寸的立方体的体积。

代码:package shiyan1;public class Main {public static void main(String args[]){Box box=new Box();box.setDemo(122,132, 142);System.out.print("立方体的体积:");System.out.println(box.getArea());}}class Box{int length;int width;int heigth;Box(){}void setDemo(int length,int width,int heigth){this.length=length;this.width=width;this.heigth=heigth;}float getArea(){return length*width*heigth;}2.将上题的方法setDemo改用构造函数实现初始化。

代码:package shiyan1;public class Main {public static void main(String args[]){Box box=new Box(123,133,143);System.out.println(box.getArea());}}class Box{int length;int width;int heigth;Box(int length,int width,int heigth){this.length=length;this.width=width;this.heigth=heigth;}float getArea(){return length*width*heigth;}}三、思考题1.一个方法或一个块内定义的变量是否可以在方法外或块外使用?这种变量称为什么?方法的形式参数是否可以在方法之外使用?答:不可以。

面向对象程序设计实习报告

面向对象程序设计实习报告

《面向对象程序设计》实习报告班级:学号:姓名:指导教师:实习时间:一.实习目的1. 学习怎样启动和退出VB,熟悉VB的工作环境2.掌握基本控件的重要属性、事件;3.熟练掌握在窗体上建立上述控件的操作方法;4.熟练掌握事件过程代码的编写;5.掌握建立基于图形界面的应用程序的过程6. 学习用属性窗口设置对象属性及用代码设置对象属性的方法。

7. 学习如何用对象(窗体和控件)建立界面及在代码编辑器中输入程序代码的基本操作。

8 .基本掌握用VB开发应用程序的一般步骤。

二.程序设计实验1 基本算法练习1.编写程序求“自己学号后3位到500”以内的所有素数及自然数对。

2.编写程序“计算最大公约数和最小公倍数”实验:计算3个数的最大公约数和最小公倍数,并以最小公倍数作为总金额,计算人民币各种票额的张数3.编写程序“歌德巴赫猜想及守形数”4.编写程序“百钱百鸡问题”实验:编写程序解决百钱买百鸡问题:公鸡5元/只,母鸡3元/只,小鸡一元买3只,用100元买100只鸡,问有哪些购买方案?实验2 常用统计练习1.成绩统计实验:利用文本框作为数据的输入和输出,产生数学、语文、英语、计算机等4门课程的成绩2.字符统计实验:随机产生200个“32到自己学号后3位”且小于128的随机数,将其转换成相应字符,形成一段统计字符。

统计字符中各个字母、各数字、空格、其它字符的个数。

实验3 常用排序方法1. 选择法排序实验:随机产生10个“学号后3位到500之间”的数,用选择法进行递增序。

2.冒泡法排序实验: 随机产生10个“50到学号后3位之间”的数,然后用冒泡法按递增的顺序进行排序。

3.二维数组排序实验:随机产生“10到学号后3位之间”的数,形成一个4*5 的二维数组,按升序排列。

4.从有序数组中删除一个元素实验要求:随机产生“1到学号后3位之间”的10个数,然后产生1-10间的随机数,确定删除元素,最后得出删除后的结果实验4 加密解密与数制转换1.数据加密与解密根据产生的后移位数,将输入的字符进行加密和解密。

面向对象程序设计(C++)实验报告

面向对象程序设计(C++)实验报告

面向对象程序设计(C++)实验报告姓名:刘九州学院:数学与计算机学院班级:10级计算机大类三班学号:100511314实验5 单继承一、实验目的1.掌握派生的类别与方式;2.了解派生类中如何使用基类的成员、基类成员在派生类中的访问控制;3. 掌握继承中构造函数和析构函数的调用过程。

二、实验内容及步骤1.给出一个Document类,从Document派生出Book类,增加PageCount变量。

在主函数中进行测试,创建Book类对象并进行初始化,输出书名和页数。

2.设计一个单基继承的类层次程序,利用Person类派生出Student类,增加属性xh(学号),Person类中至少有姓名、年龄等数据成员,成员函数中构造函数对其初始化,析构函数释放相应存储单元,输出函数输出其数据成员的值,其它成员函数根据需要添加,在主函数中进行测试。

3.设计一个人员类person和一个日期类date,由人员类派生出学生类student和教师类professor,学生类和教师类的数据成员birthday为日期类。

在主函数中进行测试。

三、实验源程序和运行结果实验(一)源程序:#include<iostream>#include<string>using namespace std;class Document{public:Document(){};~Document();Document(char*name);char *Name;void PrintNameOf();};Document::Document(char*name){Name=new char[strlen(name+1)];strcpy(Name,name);}Document::~Document(){delete []Name;}void Document::PrintNameOf(){cout<<Name<<endl;}class Book:public Document{public:int PageCount;Book(char *a,int b):Document(a){PageCount=b;}};void main(){char BookName[20];int n;cout<<"请输入书名:"<<endl;cin>>BookName;cout<<"请输入书的页数:"<<endl;cin>>n;Book b(BookName,n);cout<<"书名为:"<<<<endl;cout<<"页数为:"<<b.PageCount<<endl;}运行结果:实验(二)源程序:#include<iostream>#include<string>using namespace std;class person{public:person(){name="张三";age=0;}person(string c,int a){name=c;age=a;}~person(){}void setname(string c){name=c;}string getname(){return name;}void setage(int a){age=a;}int getage(){return age;}private:string name;int age;};class student:public person{public:student(){xh=0;}student(int d){xh=d;}student(string c,int a,int d):person(c,a){xh=d;}~student(){}void setxh(int d){xh=d;}int getxh(){return xh;}private:int xh;};void main(){string c;cout<<"请输入学生的姓名:\n";cin>>c;cout<<"请输入学生的年龄:\n";int a;cin>>a;cout<<"请输入学生的学号:\n";int d;cin>>d;student n(c,a,d);cout<<"请输入学生的姓名为:"<<n.getname()<<endl;cout<<"请输入学生的年龄为:"<<n.getage()<<endl;cout<<"请输入学生的学号为:"<<n.getxh()<<endl; }运行结果:实验(三)源程序:#include<iostream>using namespace std;class person{public:person(){name="张三";age=0;}person(string c,int a){name=c;age=a;}~person(){}void setname(string c){name=c;}string getname(){return name;}void setage(int a){age=a;}int getage(){return age;}private:string name;int age;};class date{public:date(){year=2011;month=12;day=17;}~date(){}date(int y,int m,int d){year=y;month=m;day=d;}int getyear(){return year;}int getmonth(){return month;}int getday(){return day;}private:int year;int month;int day;};class student:public person{public:student(){// birthday.date();}student(int y,int m,int d):birthday(y,m,d){}~student(){}void getbirthday(){cout<<"学生的生日为:\n";cout<<birthday.getyear()<<"年"<<birthday.getmonth()<<"月"<<birthday.getday()<<"日"<<endl;}private:date birthday;};class teacher:public person{public:teacher(){// birthday.date();}teacher(int y,int m,int d):birthday(y,m,d){//birthday.date(y,m,d);}~teacher(){}void getbirthday(){cout<<"老师的生日为:\n";cout<<birthday.getyear()<<"年"<<birthday.getmonth()<<"月"<<birthday.getday()<<"日"<<endl;}private:date birthday;};void main(){cout<<"请输入学生的生日:"<<endl;int y,m,d;cin>>y>>m>>d;student s(y,m,d);cout<<"请输入老师的生日:"<<endl;cin>>y>>m>>d;teacher t(y,m,d);s.getbirthday();t.getbirthday();}运行结果:实验6 多继承一、实验目的1.掌握多基继承的使用,访问方法;2.理解类层次中访问规则;3.掌握虚基类的定义及使用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

安徽工业大学面向对象程序设计实验报告实验课程:《C++语言程序设计》学生姓名:学号:专业班级:2011年 12 月 18 日目录实验1熟悉C++开发环境及简单程序设计和应用 (3)实验2基本控制结构程序设计 (6)实验3 类与对象 (10)实验4友元函数与友元类 (13)实验5数组与指针 (16)实验6静态成员 (20)实验7类的继承 (22)实验8多态 (24)安徽工业大学实验报告学生姓名:张虹学号:6100409033 专业班级:网络工程091 实验类型:□验证□综合□设计□创新实验日期:实验成绩:实验1熟悉C++开发环境及简单程序设计和应用一、实验目的1.初步了解C++程序的编译、连接和运行的过程。

2.掌握和理解C++程序的结构。

二、实验内容1.使用VC2.运行一个简单的C++程序3.编程求出对任意输入的两个整数,求出该两个整数的最大公约数和最小公倍数三、实验步骤1.启动VC或2.建立工程并输入以下程序#include<iostream> using namespace std; void main(){int i(1), sum(0); do {sum+=i;i++;}while(i<=10);cout<<"sum="<<sum<<endl; }3.保存文件、运行程序、退出VC程序、打开已经存在的文件4.编程求出对任意输入的两个整数,求出该两个整数的最大公约数和最小公倍数编写以下代码:#include<iostream>using namespace std;void main(){int a,b,c,d,i;cout<<"a=";cin>>a;cout<<"b=";cin>>b;for(i=1;i<=a && i<=b;i++)if(a%i==0 && b%i==0)c=i;for(i=a*b;i>=a && i>=b;i--)if(i%a==0 && i%b==0)d=i;cout<<"a和b的最大公约数为"<<c<<endl;cout<<"a和b的最小公倍数为"<<d<<endl;}将以上代码编译链接运行.得到结果:安徽工业大学实验报告学生姓名:张虹学号:6100409033 专业班级:网络工程091 实验类型:□验证□综合□设计□创新实验日期:实验成绩:实验2基本控制结构程序设计一、实验目的:学会编写简单的C++程序。

练习使用简单的输入输出。

观察关文件的作用。

学会使用DEBUG调试程序。

二、实验任务:(1)输入并运行教材《C++语言程序设计》中的例题2-7,即:用do-while语句编程,求自然数1~10之和。

程序正确运行之后,去掉源程序中的#include语句,重新编译,观察会有什么问题。

do-while语句用for语句代替,完成相同的功能。

程计算图形的面积。

程序可计算圆形、长方形、正方形的面积,运行时先提示用户选择图形的类型,然后,对圆形要求用户输入半径值,对长方形要求用户输入长和宽的值,对正方形要求用户输入边长的值,计算出面积后将其显示出来。

使用debug调试功能观察程序运行中变量值的变化情况。

定义一个表示时间的结构体,可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来。

三、实验步骤建立一个控制台应用程序项目lab2_1,向其中添加一个C++源文件lab2_1.cpp,输入教材《C++语言程序设计》中例2-7的代码,检查一下确认没有输入错误,选择菜单命令编译源程序,再选择Execute运行程序,观察输出是否与教材中的答案一致。

程序正确运行之后,在源程序第一行”#include <iostream.h>”前面加注释标记”//”使之成为注释行,重新编译,观察编译的结果。

另建立一个项目lab2_2,包含一个C++源程序lab2_2.cpp,将do-while语句用for语句代替,完成与实验任务1相同的功能。

建立项目lab2_3,计算图形面积。

圆形的面积计算公式为S=PI*r*r,长方形的面积计算公式为S=a*b,正方形的面积市场计算公式为S=a*a。

程序中定义一个整型变量iType表示图形的类型,用cout语句输出提示信息让用户选择图形的型,用cin读入iType的值,然后,使用switch语句判断图形的类型,分别提示用户输入需要的参数值,计算出面积的值后用cout 语句显示出来。

最后编译运行程序。

学习简单的debug调试功能,参考程序如下://lab2_3.cpp#include <iostream.h>const float PI=3.1416;void main(){int iType;float radius,a,b,area;cout<<”图形的类型?(1为圆形,2为长方形,3为正方形):”;cin>>iType;switch(iType){case 1:cout << “圆的半径为:”; cin>>radius;area=PI*radius*radius;cout<<”面积为”<<area<<endl; break;case 2:cout<<”矩形的长为:”; cin>>a;cout<<”矩形的宽为:”; cin>>b;area=a*b;cout<<”面积为:”<<area<<endl; break;case 3:cout<<”正方形的边长为:”; cin>>a;area=a*a; cout<<”面积为:”<<area<<endl;break;default:cout<<”不是合法的输入值!”<<endl;}}选在第10行处设置调试断点。

用鼠标左键单击源程序第10行左边的空白处,出现一个菜单。

择Insert|Remove Breakpoint选项,可看到左边的边框上出现一个褐色的圆点,这代表已经在这里设置了一个断点。

后选择菜单命令Build|Start Debug|Go,系统统进入Debug状态,程序开发运行,并停在断点处。

单步执行,并观察程序中相应变量的变化情况。

根据实验要求输入以下代码:1.当a=1,b=2,c=3时,编程求出a^b&-ca&b|c!a|a~a|aa^aa>>2按要求编写以下程序:#include<iostream>using namespace std;void main(){cout<<"a=1 b=2 c=3"<<endl;int a=1,b=2,c=3;int answer[6];cout<<"a^b&-c"<<(answer[0]=a^b&-c)<<endl;cout<<"a&b|c"<<(answer[1]=a&b|c)<<endl;cout<<"!a|a"<<(answer[2]=!a|a)<<endl;cout<<"~a|a"<<(answer[3]=~a|a)<<endl;cout<<"a^a"<<(answer[4]=a^a)<<endl;cout<<"a>>2"<<(answer[5]=a>>2)<<endl; }将代码编译链接得到2.编程实现这样一个完整的程序,运行时向用户提问“你考试考了多少分?(0~100),等级范围优90〈=分数〈=100良80〈=分数〈90中60〈=分数〈80差0〈=分数〈60按要求编写以下代码:#include<iostream>using namespace std;int main(){int score;cout<<"请输入分数: ";cin>>score;if(score>=100 || score<=0){cout<<"输入有误.程序关闭"<<endl;return 0;}else{if(score>=90)cout<<"优秀"<<endl;else if(score>=80)cout<<"良"<<endl;else if(score>=60)cout<<"中"<<endl;elsecout<<"差"<<endl;return 1;}}运行得到以下结果:3.用递归方法编写程序求Fibonacci级数,公式为:fib(n)=fib(n-1)+fib(n-2),n>2;fib(1)=fib(2)=1;观察递归调用的过程。

按要求编写以下代码:#include <iostream> using namespace std; int fib(int n);void main(){int n;cout<<"请输入n:"; cin>>n;int a;a=fib(n);cout<<a <<"是第"<<n<<"级Fib级数的值"<<endl;}int fib(int n){if(n==1 || n==2)return(1);elsereturn(fib(n-1)+fib(n-2));}五.思考题1.小结多重选择结构。

2.递归调用如何才是有意义的。

相关文档
最新文档