第一篇:面向对象编程的总结
面向对象编程的总结(理解与看法)面向对象程序设计(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。
OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
面向对象有三大特性,分别是:封装、继承、多态。封装是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。任何类都可以从另外一个类继承,即这个类拥有它所继承类的所有成员。被继承的类称为父类或基类。C# 只支持单继承,不支持多重继承,即在C# 中一次只允许继承一个类,不能同时继承多个类。在C# 中,接口允许多继承,可以通过继承多个接口来实现类似于C++中的多重继承。
多态是同一个类在不同场合下表现出不同的行为特征。
使用抽象方法与虚方法都可以实现多态性。抽象方法是一个未实现的方法,使用abstract关键字修饰,含有抽象方法的类必然是抽象类。抽象方法要在其子方法中通过override关键字重写。
简单工厂模式用于在调用者不知道对象属于哪个自雷的情况下,创建不同的对象。
第二篇:Java面向对象编程习题总结
第一章
面向对象开发方法概述
1.面向对象的软件开发有哪些优点?
1)
把软件系统看成是各种对象的集合,这更接近人类的自然思维方式。
2)
软件需求的变动性往往是功能的变动,而功能的执行者——对象,一般不会有多大的变化,比结构化更稳定。
3)
对象包括属性和行为,对象把数据及方法的具体实现方式一起封装起来,使得方法与之相关的数据不再分析,提高了每个子系统的相对对立性,从而提高软件的可维护性。
4)
支持封装,抽象,继承和多态。提高了软件的可重用性,可维护性和可扩展性。
2.在软件系统中,为什么说一个孤立的不对外提供任何服务的对象是没有意义的?
1)
每个对象都具有特定的功能,相对于其他对象而言,它的功能就是为其他对象提供的服务。
2)
从使用者角度出发,整个软件系统就是一个服务的提供者。
3)
在系统内部,每个子系统也都是服务的提供者,它们其他子系统提供服务。
4)
因此说一个孤立的部队为提供任何服务的系统是美欧任何意义的。
3.列举一些现实生活中的例子,来说明什么是依赖关系、什么是聚集关系,以及什么是关联关系。
1)
关联关系:关联是指类之间的特定对应关系,可以分为单向关联和双向关联,也可以分为一对一关联、一对多关联以及多对多关联。A关联B,是指Class A与Class B之间存在特定的对应关系。举例如学生和老师,订单和客户。
2)
依赖关系:类之间的调用关系。A依赖B,Class A访问Class B提供的服务。如Panel与Shape的关系。
3)
聚集关系:是整体与部分之间的关系
4.列举一些显示生活中的例子,来说明什么是封装,什么是接口。
1)
接口:对象中所有向使用者公开的方法的声明构成了对象的接口。
2)
封装:隐藏对象的属性和实现细节,仅仅对外公开接口。
3)
接口的优点:a.提高系统之间松散耦合b.提高了系统的可扩展性。
4)
封装的有点:
a.便于使用者正确、方便地理解和使用系统,防止使用者错误修改系统的属性。
b.有助于建立各个系统之间的松耦合关系,提高系统的独立性。
c.提高软件的可重用性,没个系统都是一个相对独立的整体,可以在多种环境中得到重用。
d.降低构建大型系统的风险,即使整个系统不成功,个别的独立子系统有可能依然有价值。
5.抽象的最主要特征是什么?
抽象是指从特定角度出发,从已经存在的一些事物中抽取我们所关注的特性,形成一个新的事物的思维过程。
6.在建立对象模型时,要经历哪些抽象思维过程?
1)
从问题领域的事物到软件模型中对象的抽象。
2)
从对象到类的抽象。
3)
从子类到父类的抽象
7.类就是程序员自定义的类型。这种说法是否正确?
不正确,类是一组具有相同属性和行为的对象的抽象。类及类的关系构成了对象模型的主要内容。开发人员需要根据先识别对象,然后再进行分类(创建任意的数据模型)的思路来建立对象模型。
8.小王本来体重70kg,经过减肥,体重降到45kg,试从这个问题领域中识别对象、类、属性、状态和状态的变化。
1)
类:人。
2)
对象:小王。
3)
属性:体重。
4)
状态:70kg。
5)
状态的变化:小王的减肥行为导致体重下降。
9.在UML图中哪些框图描述了系统的动态结构,哪些框图描述了系统的静态结构?
1)
用例图、类框图、组件图、部署图构成了系统的静态模型。
2)
状态转换图、时序图、协作图则构成了系统的动态模型。
第二章
第一个Java应用
1.把一个类放在包里有什么用?
答:把类分包的作用:
(1)
能够区分名字相同的类
(2)
有助于实施访问权限控制
(3)
有助于划分和组织Java应用中的各个类
2.JavaDoc文档是不是为软件的终端用户提供的使用指南?
答:不是的,JavaDoc文档是供Java开发人员阅读的,他们通过JavaDoc文档来了解其他开发人员开发的类的用法。Java开发人员应该养成经常阅读JavaDoc文档的良好习惯。
3.对于com.abc.dollapp.AppMain类,使用以下命令进行编译,编译出来的.class文件位于什么目录下?
java –d C:classes –sourcepath C:src C:srccomabcdollappAppMain.java
答:将会存放在C:classescomabcdollapp下。
4.对于以上编译出来的AppMain类,以下哪个java命令能正确运行它?
(a)
java C:classescomabcdollappAppMain.class
(b)
java –classpath C:classes AppMain
(c)
java –classpath C:classescomabcdollapp AppMain
(d)
java –classpath C:classes com.abc.dollapp.AppMain
答:(b)
5.以下哪些main()方法的声明能够作为程序的入口方法?
(a)
public static void main()
(b)
public static void main(String[] string)
(c)
public static void main(String args)
(d)
static public int main(String[] args)
(e)
static void main(String[] args)
答:(b),主函数必须以public static void形式存在,参数必须为String数组形式。
6.假定以下程序代码都分别放在MyClass.java文件中,哪些程序代码能够编译通过?
(a)
import java.awt.*;package Mypackage;
class MyClass{};
(b)
package MyPackage;
import java.awt.*;
class MyClass{};
(c)
/*This is comment*/
package MyPackage;
import java.awt.*;
public class MyClass{};
答:(c),程序顺序必须按照import, package, class走,源文件必须以public类型的类命名。
7.对于以下Myprog类,运行命令”java Myprog good morning”,将会得到打印结果?
public class Myprog {
public static void main(String argv[])
{
System.out.println(argv[2]);
} }
答:打印结果为空。argv[0] = “good”, argv[1] = “morning”。
8.下面哪些是Java的关键字?
(a)
default
(b)
NULL
(c)
String
(d)
throws
(e)
long
(f)
true
答:(a),(d),(e),(f),java中所有的关键字都是小写。
9.当AppMain类的main()方法创建了5个Doll对象时,运行时数据区的数据如何分布的?参考2.4节的图2-13,画出此时运行时数据区的状态图。
运行时数据区(内存)
Java栈区
执行main()方法的主线程的方法调用栈
局部变量beibei
局部变量jingjing
局部变量huanhuan
局部变量yingying
局部变量nini
堆区
Doll实例
name:贝贝
Doll实例
name:晶晶
Doll实例
name:欢欢
Doll实例
name:迎迎
Doll实例
name:妮妮
方法区
Doll类型信息
AppMain类型信息
(包含main()方法信息)
10.下面哪些是合法的Java标识符?
(a)
#_pound
(b)
_underscore
(c)
5Interstate
(d)
Interstate5
(e)
_5_
(f)
class
答:(b),(d),(e)标识符命名规则如下:
(1)
标识符首字母必须为字母、下划线“_”、美元“$”、人民币“¥”(2)
标识符由数字、大写字母、小写字母、下划线以及美元等组成
(3)
不能把关键字和保留字作为标识符
(4)
标识符没有长度的限制
(5)
标识符是大小写敏感的第三章
数据类型和变量
1.对于以下程序,运行“java Abs”,将得到什么打印结果?
public class Abs
{
static int a = 0x11;
//十六进制
static int b = 0011;
//八进制
static int c = 'u0011';
//十六进制数据的Unicode字符编码
static int d = 011;
//八进制
/**
* @param args
*/
public static void main(String[] args)
{
System.out.println(“a=”+a);
System.out.println(“b=”+b);
System.out.println(“c=”+c);
System.out.println(“d=”+d);
} }
答:输出如下
a=17 b=9 c=17 d=9
2.以下哪段代码能正确编译通过?
(a)
char a = „a‟;
char b = 1;
char c = 08;
(b)
int a = „a‟;
(c)
long a =‟u00FF‟;
(d)
char a = „u0FF‟;
(e)
char d = “d”;
答:(b)、(c)能通过编译。(a)中“char c=08”将int赋值给char需要部分强制转换,“char c=8”就正确;(d)中unicode编码错误,java采用的是UCS-2编码,共16位;(e)字符赋值是使用单引号,字符串String赋值时才使用双引号。
3.下面哪些代码能编译通过?
(a)
short myshort=99S;
(b)
String name = „Excellent tutorial Mr Green‟;(c)
char c = 17c;
(d)
int z = 015;
答:(d)可以编译通过。(a)中char赋值给short需要强制转换;(b)中String类型赋值用双引号;(c)中int赋值给char需要部分强制转换。
4.字符“A”的Unicode字符编码为65.下面哪些代码正确定义了一个代表字符“A”的变量?
(a)
Char ch=65;
(b)
Char ch=‟65‟;
(c)
Char ch =‟u0041‟;
(d)
Char ch=‟A‟;
(e)
Char ch =”A”
答:(c)、(d)可以得到”A”。(b)的输出为5,其他无法编译通过。
5.以下代码共创建了几个对象?
String s1=new String(“hello”);
String s2=new String(“hello”);
String s3=s1;
String s4=s2;
答:共创建了2个对象。栈区4个局部变量分别引用了堆区的2个实例,而2个实例又引用了工作区的同一个类。
6.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果?
class Test {
static int myArg = 1;
public static void main(String[] args)
{
Int myArg;
System.out.println(myArg);
} }
答:无法编译通过,因为局部变量myArg声明之后Java虚拟机就不会自动给它初始化为默认值,若在使用前未被初始化,编译会报错。
7.对于以下程序,运行“java Mystery Mighty Mouse”,将得到什么打印结果?
public class Mystery
{
public static void main(String[] args)
{
Changer c = new Changer();
c.method(args);
System.out.println(args[0]+“ ”+args[1]);
}
static class Changer
{
void method(String[] s)
{
String temp = s[0];
s[0] = s[1];
s[1] = temp;
}
} }
答:打印结果为“Mighty Mystery”
8.对于以下程序,运行“java Pass”,将得到什么打印结果?
public class Pass
{
static int j = 20;
public static void main(String[] args)
{
int i=10;
Pass p = new Pass();
p.amethod(i);
System.out.println(“i=”+i);
System.out.println(“j=”+j);
}
public void amethod(int x)
{
x*=2;
j*=2;
} }
答:打印结果是
i=10 j=40
其中“int x”是传参,作用域仅在amethod之中。
第四章 操作符
1.以下哪些程序代码能够编译通过?
(a)
int i=0;if(i){
System.out.println(“hello”);}
(b)
boolean b1=true;
boolean b2=true;
if(b1==b2){
System.out.println(“So true”);}
(c)
int i=1;
int j=2;
if(i==1||j==i){
System.out.println(“ok”);}
(d)
int i=1;
int j=2;
if(i==1&|j==i){
System.out.println(“ok”);}
答:(b)、(c)能编译通过。(a)中int不能作为boolean出现,(d)中不能出现&|该操作符。
2.运行以下程序,将得到什么打印结果?
System.out.println(-1>>>1);
System.out.println(-1>>1);
System.out.println(2>>1);
System.out.println(1<<<1);
答:>>>是逻辑右移位操作符,也称不带符号右移位操作符,在移位的过程中二进制数开头填0;>>是右移位操作符,也称带符号右移位操作符,舍弃末尾,在开头填符号位;<<<操作符不存在;
11111111 11111111 11111111 11111111
-1>>>1
01111111 11111111 11111111 11111111
11111111 11111111 11111111 11111111
-1>>1
11111111 11111111 11111111 11111111
00000000 00000000 00000000 00000010
2>>1
00000000 00000000 00000000 00000001
2147483647-1 1
3.以下temp变量最终取值是什么?
long temp =(int)3.9;
temp %= 2;
答:取值为1。
4.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果?
if(5 & 7 > 0 && 5 | 2)System.out.println(“true”);
答:int型不能作为boolean型出现。
5.以下代码能否编译通过?假如编译通过,运行时将得到什么打印结果?
int output=10;
boolean b1 = false;
if((b1==true)&&((output+=10)==20)){
System.out.println(“We are equal”+output);} else {
System.out.println(“Not equal!”+output);}
答:Not equal!10
6.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果?
int output=10;
boolean b1 = false;
if((b1==true)&((output+=10)==20)){
System.out.println(“We are equal”+output);} else {
System.out.println(“Not equal!”+output);}
答:Not equal!20
7.对于以下声明:
String s1=new String(“Hello”);
String s2=new String(“there”);
String s3=new String();
下面哪些是合法的操作?
(a)
s3=s1+s2;
(b)
s3=s1-s2;
(c)
s3=s1&s2;
(d)
s3=s1&&s2;
答:(a)是合法操作。除了“+”能用于字符串的连接以外,其他操作符(如“-”、“&”、“&&”等)都不支持String类型的操作元。
第五章
流程控制
1.运行以下代码,将得到什么打印结果?
int i = 3;
int j = 0;
double k = 3.2;
if(i < k)
if(i == j)
System.out.println(i);
else
System.out.println(j);
else
System.out.println(k);
答:0
2.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果?
int i = 4;
switch(i){
default:
System.out.println(“default”);
case 0:
System.out.println(“zero”);
break;
case 1:
System.out.println(“one”);
case 2:
System.out.println(“two”);}
答:可以编译通过,打印结果是:
default
zero
分析:default可以放在任何位置上,一旦符合一个case即从头执行到尾,不再判断case。
3.以下哪些是合法的
(a)
int i;for(i=5, int j=10;i<10;j--){}
(b)
int i,j;for(i=0, j=10;i<10, j>0;i++, j--){}
(c)
int i,k;for(i=0, k=9;(i<10 && k>0);i++, k--){}
(d)
int i,j;for(i=0;j=10;i<10;i++,j--){} 答:(a)for语句中int定义要放在开头。编译不通过。
(b)循环判断语句不可以用逗号连接。编译不通过。
(c)合法。
(d)分号只能有2个。
4.运行以下代码,将得到什么打印结果?
int i = 1;
switch(i){
default:
System.out.println(“default”);
case 0:
System.out.println(“zero”);
break;
case 1:
System.out.println(“one”);
case 2:
System.out.println(“two”);}
答:分析同1,运行结果如下:
one
two
5.以下哪些代码合法?
(a)
float x=1;
switch(x){
case 1;
System.out.println(“Got a 1”);
}
(b)
long x=1;
switch(x){
case 1;
System.out.println(“Got a 1”);
}
(c)
byte x=1;
switch(x){
case 1/1;
System.out.println(“Got a 1”);
}
(d)
int x=1;
int c=1;
switch(c){
case x;
System.out.println(“Got a 1”);}
(e)
short x=1;
switch(x){
case 3.2/2;
System.out.println(“Got a 1”);
}
(f)
short x=1;
switch(x){
case 1,2,3;
System.out.println(“Got a 1”);
}
答:只有(c)是合法的。
6.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果?
for(int a=0, b=0;a<2;b=++a, System.out.println(“b=”+b)){
System.out.println(“a=”+a);}
答:可以通过编译,打印结果:
a=0 b=1 a=1 b=2
7.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果?
int x=0;one:
while(x<10)
{
two:
System.out.println(++x);
if(x>3)
break two;
}
答:不能通过编译。
第三篇:使用java实现面向对象编程总结
第一章:抽象和封装
1,为什么使用面向对象
1.1:万事万物皆对象,面向对象就是采用“现实模拟”的方法设计和开发程序。
2,使用面向对象进行设计
2.1:面向对象设计三部曲
1,发现类。
2,发现类的属性。
3,发现类的方法。
经验:在需求中找出名词的方式确定类和属性,找出动词的方式确定方法。
3,创建类的对象
1,通过构造方法来创建对象
2,通过对象名.属性名的方式调用属性。
3,通过对象名.方法名的方式调用方法。
4,Static可以用来修饰属性,方法和代码块。Static修饰的变
量属于这个类所有。即由这个类创建的所有对象共有同一个static变量。类属性,类方法可以通过类名和对象名访问,势力属性,实例方法只能通过对象名访问。
5,在方法里不可以定义static变量,类变量不能是局部变量。6,构造函数的重载
1,构造方法的名字和类名相同,没有返回值类型。构造
方法的作用主要就是在创建对象是执行一些初始化操作,赋值。
2,在没有给类提供任何构造方法时,系统会提供一个无
参的方法体为空的默认构造方法。一旦提供了自定义构造方法,系统将不会提供这个默认构造方法,如果要使用她,必须手动添加。
3,如果同一个类中包含了两个或两个以上方法,它们的方法名相同,方法参数个数或参数类型不同,则称该方法被重载。成员方法和构造方法都可以重载。
4,构造方法没有返回值类型。如果有,就不是构造方法,而是构造方法同名的成员方法。
5,封装
1,封装是类的三大特性之一,就是将类的状态信息隐
藏在内部。
2,封装的具体步骤:为每个属性创建一对一赋值,在赋值方法中,加入对属性的存取控制语句。
3,隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以方便地加入存取控制语句,限制不合理操作。
第四篇:C语言面向对象编程学习笔记
C语言面向对象编程笔记
1、在底层驱动函数前加static标识符的作用:
a:加了static后表示该函数失去了全局可见性,只在该函数所在的文件作用域内可见 b:当函数声明为static以后,编译器在该目标编译单元内只含有该函数的入口地址,没有函数名,其它编译单元便不能通过该函数名来调用该函数,这也是对1的解析与说明
2、底层驱动的封装模板
通常将存储类,显示类,AD-DA类的外设驱动函数封装为以下几个函数: Void Open(void);
此函数用于开启外设,通常函数体中包涵IO和外设的初始化 Void Close(void)此函数用于关闭外设,特别是一些在休眠下功耗很大的外设,可用mos管控制其Vcc的通断,以此达到降低系统功耗的目的
Void Read(unsigned int address,unsigned char *data[],unsigned int count)
此函数用于读取数据,参数分别为:address,地址,*data[],存放数据的数组,count,要读取的字节数
Void Write(unsigned int address,unsigned char *data[],unsigned int count)此函数用于写数据,参数功能与读函数中相似。
Void control(unsigned char cmd,unsigned char data)此函数用于控制外设的工作状态,如休眠,低功耗等等
3、命名规则
A、宏定义全部用大写
如:#define OLED_CS PBout(12)B、驱动函数名称大小写,并且动词放置在末尾如
static long _OLED_Close(void)C、结构体的名称,结构体名大写,变量名小写,“驱动”的首字母大写
如:struct OLED_DEVICE oledDevice;
4、关于外设的数据手册
外设的数据手册应该去芯片的官网下载最新版本,特别注意芯片的是否有功耗控制方面的内容,
第五篇:面向对象知识总结
一、封装
1.类本身就是一个封装单元
2.实现:A属于私有化;B共有的方法提供给外界访问;C信息隐藏,安全,对外提供清晰的接口
二、继承
1.代码共有,方便维护扩展 2.更符合人类遇到的问题及处理的习惯 3.多重继承关系下构造函数的执行过程
三、多态
1.概念
2.好处
3.应用(生活,程序中的应用)
程序多态的应用
1.方法重载
2.重写父类的方法
3.重写父类的抽象方法
4.父类类型作为方法参数,实现
5.以父类的引用,接收不同子类返回的结果
6.用接口实现
四、面向接口编程
1.理解接口
1.1接口体现的是一种能力
体现在接口中的方法
1.2接口的体现是一种约定体现在注释和接口的名称 1.3面向接口编程程序设计时:
A关注实现类有那些功能,不需要关注实现细节
B面向接口的约定不考虑接口
具体的实现2.使用接口如何使用接口?A编写接口<-----根据需求设计接口的方法 B实现接口<-----实现接口里定义的所有方法 C使用接口<-----多态 3.特征1.多实现,弥补单一继承不足 2.项目初期,搭建系统时不需要考虑具体的实现自然使用接口:设计和显现分离 3.方便搭建整个应用系统,及系统设计
也方便搭建系统框架 4.多态应用的很好体现更自然的使用多态
重点:
1.掌握抽象类与接口不同之处 难点:
1.方法重载与重写 2.继承关系下,构造函数执行流程 知识体系:
数据库体系 + OO体系