面向对象程序设计学什么

面向对象程序设计学什么,第1张

面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。

面向对象程序设计的三大特征是多态(Polymorphism)、继承(Inheritance)、封装(Encapsulation)。

1、多态

多态核心的思想就是,父类的引用能够指向子类的对象,或者接口类型的引用能够指向实现该接口的类的实例。多态会这样的原因是因为子类就是父类。

2、继承

Java是单继承的,这一点和C++有所不同,这也就意味着,一个类只能继承于一个类,被继承的类叫父类,或者是叫基类baseclass,继承的类叫子类。

Java当中的继承使用关键字extends。可是,一个类能够实现多个接口,多个接口之间用逗号进行分割。实现接口使用关键字implements。

3、封装(Encapsulation)

封装比较的简单,类包含了方法和数据,将方法和数据放在一个类当中,就构成了封装。封装的优点:将变化隔离,便于使用,提高重用性,提高安全性;封装的缺点:将变量等使用private修饰,或者封装进方法内,使其不能直接被访问,增加了访问步骤与难度!

面向对象程序设计的六大基本原则:

1、单一职责原则

不要存在多于一个导致类变更的原因,即一个类只承担一个职责。

2、开放-封闭原则

对扩展开放,对修改封闭。无论模块多么封闭,都会存在一些无法对之封闭的变化,既然不能完全封闭,我们必须对于自己设计的模块应该对哪种变化封闭做出选择,必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离这些变化。

3、迪米特原则

一个对象应该对其他对象有最少的了解,减少类与类之间的耦合。如果两个类不必彼此通信,那么这两个类就不应当发生直接的相互作用。类与类之间的耦合越弱,越有利于复用,一个处于弱耦合的类被修改,不会对有关系的类造成波及。

4、依赖倒转原则

上层模块不要依赖底层模块,它们都要依赖于抽象。抽象不能依赖于细节,细节要依赖于抽象。面向接口编程,不要面向实现编程。

5、里氏替换原则

子类型必须能够替换掉它们的父类型。只有当子类可以替换掉父类,软件单位的功能不受影响时,父类才能真正的被复用,而子类也能够在父类的基础上增加新的行为。

6、接口隔离原则

客户端不应该依赖于它不需要的接口,一个类对一个类的依赖应该建立在最小的接口上。不要让与自己无关的修改影响到自己功能模块的变化。

《面向对象程序设计》课程针对没有或很少编程经验的在职人员,介绍使用C#编写Windows桌面应用程序的基本技术,让学习者了解面向对象软件基础理论知识, 并培养出基本的软件开发技能,同时可以学以致用,应用软件技术解决一些简单的实际问题。

#include<iostream.h>

#include<string.h>

#include<fstream.h>

class stu

{

char name[20]

double math,chinese,english,average,sum

public:

stu()

{

}

stu(char n[20],double ma,double chin,double eng)

{

strcpy(name,n)

math=ma

chinese=chin

english=eng

}

double getsum()

{

sum=chinese+english+math

return sum

}

double getaver()

{

average=getsum()/3

return average

}

friend void main()

}

void main()

{

cout<<"请选择您需要的 *** 作!"<<endl

cout<<" *** 作:"<<endl

cout<<"(0)数据录入"<<endl

cout<<"(1)增加人员"<<endl

cout<<"(2)删除人员"<<endl

cout<<"(3)修改数据"<<endl

cout<<"查询:"<<endl

cout<<"(4)按总成绩查询"<<endl

cout<<"(5)按姓名查询"<<endl

cout<<"(6)输出所有学生的数据"<<endl

cout<<"成绩名词"<<endl

cout<<"(7)按总分查询排名"<<endl

cout<<"(8)按语文查询排名"<<endl

cout<<"(9)按数学查询排名"<<endl

cout<<"(y)按英语查询排名"<<endl

cout<<"选择相关 *** 作请输入相对的括号里的阿拉伯数字!"<<endl

char pchar w

stu *s[50]

ofstream *file[50]

int i=0

int j=0

bool flag2=0

do

{

cin>>p

if((p>='0'&&p<='10'))

flag2=1

else

cout<<"指令错误!请重新输入:"<<endl

}while(flag2==0)

do

{

switch(p)

{

case '0':

{

char c

char name[20]double math,chinese,english

do{

cout<<"请输入姓名"<<endl

cin>>name

cout<<"请输入数学成绩:"<<endl

cin>>math

cout<<"请输入语文成绩:"<<endl

cin>>chinese

cout<<"请输入外语成绩:"<<endl

cin>>english

file[j]=new ofstream("d:\\document",ios::ate)

*file[j]<<"姓名"<<name<<"数学成绩"<<math<<"语文成绩"<<chinese<<"外语成绩"<<english<<endl

j++

s[i]=new stu(name, math, chinese, english)

i++

cout<<"数据录入成功,想继续录入吗(y/n)"<<endl

cin>>c

flag2=0

do

{

if(c!='y'&&c!='n')

{

cout<<"指令错误!请重新输入!"<<endl

cin>>c

}

else

flag2=1

}while(flag2==0)

}while(c=='y')

break

}

case '4':

{

double tchar c

do

{

int flag1=0

cout<<"请输入你要查询学生的总成绩"<<endl

cin>>t

for(int q=0q<iq++)

{

if(s[q]->getsum()==t)

{

flag1=1

cout<<"您要查询的学生是:"<<(*s[q]).name<<endl

}

}

if(flag1==0)

cout<<"对不起!您要查询的学生不存在!"<<endl

cout<<"您想继续查询吗?(y/n)"<<endl

cin>>c

if(c!='y'&&c!='n')

{

cout<<"指令错误!请重新输入!"<<endl

cin>>c

}

}

while(c=='y')

break

}

case '5':

{

char n[20]int j=0char c

do{

int flag=0

cout<<"请输入你要查询的学生姓名"<<endl

cin>>n

for(int j=0j<ij++)

{

if(strcmp(n,(*s[j]).name)==0)

{

flag=1

cout<<"您要查询的学生是:"<<(*s[j]).name<<endl

cout<<(*s[j]).name<<"的总成绩成绩是"<<(*s[j]).getsum()<<endl<<"平均成绩是:"<<(*s[j]).getaver()<<endl

}

}

if(flag==0)

cout<<"对不起!您要查询的学生不存在!"<<endl

cout<<"您想继续查询吗?(y/n)"<<endl

cin>>c

if(c!='y'&&c!='n')

{

cout<<"指令错误!请重新输入!"<<endl

cin>>c

}

}

while(c=='y')

break

} 还有一部分。。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11155514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存