一、面向对象与面向过程编程的区别
我们以一个实际例子来说明这两者的区别 , 例如:写一个计算器的软件。
面向过程程序员思考方式:
[1]定义变量保存用户的输入的数据
[2]实现一个加法函数,完成数据的加法
[3]实现一个减法函数,完成数据的减法
[4]实现一个乘法函数,完成数据的乘法
.....
面向对象程序员思考方式:
[1]计算器是一个对象
[2]这个对象应该有保存数据的变量
[2]这个对象应该有完成数据计算的方法(函数)
....
oc是不能直接修改对象的结构体的成员变量属性,一般做法是先取出对象的结构体变量,修改该取出来的结构体变量里面的成员,再把结构体对象赋值给原来的结构体变量,在ui中为了简化代码一般对uiview做一个category,这个分类把上面修改结构体成员变量的方法封装起来,。显式调用:除去以上对两种隐式的方法调用的封装外,velocity还有一种简单的方法调用方式,就是带有括号的方法调用,如$person.setname(“junshan”),这种精确的方法调用会直接查找变量$person对应的对象有没有setname(string)方法,如果有,会直接返回一个velmethod对象,这个对象是对通用的方法调用的封装,它可以处理$person对应的对象是数组类型或静态类时的情况。 } 类厂本身是一个管理组件实例化的类. 在 xpcom 中, 类厂要实现 nsifactory 接口, 它们就象上面的代码一样要使用类厂设计模式来封装对象的构造和初始化.封装构造函数 的例子是一个简单的无状态的类厂版本, 实际的编程要复杂一些, 一般的类厂都需要保存状态. 类厂至少应该保存那些对象已经被创建了的信息. 如果类厂管理的实例被存放在一个动态联接库中, 还需要知道什么时候可以卸载这个动态联接库. 当类厂保存了这样的信息, 就可以向类厂查询一个对象是否已经被创建.另一个需要保存的信息是关于单件. 如果一个类厂已经创建了一个单件类型的类, 后续的创建该单件的函数调用将返回已经创建的对象. 尽管有更好的工具和方式来管理单件, 开发人员可能仍然需要通过这种方式来保证只有一个单件对象被创建.厂模式可以完全利用函数来做, 状态可以保存在全局变量中。
我们都是搞C语言的,C语言是一种典型的面向过程语言。在这里想问一个问题:如何用C语言描述面向对象程序员的思考的计算器呢?
嗯,你一定会想到用C语言中的结构体来实现,封装的结构体如下:
typedef struct
{
int data1;
int data2;
int (*calc_add)(int,int);
int (*calc_sub)(int,int);
int (*calc_mul)(int,int);
...
}calc_t;
定义一个计算器类型的变量
calc_t calc;
可以看的出来,编程语言本身并没有面向对象和面向过程之分,只是程序员的思考方式不一样罢了。
好了,我们接着思考:如果我要开发一个手机软件,这个手机软件软件中要包含打电话功能、计算器功能、播放音乐功能,这些又该如何实现呢?
面向过程序员,思考方式:
[1]定义变量保存用户的输入的数据
[2]实现一个加法函数,完成数据的加法
[3]实现一个减法函数,完成数据的减法
[4]实现一个乘法函数,完成数据的乘法
[5]实现一个打电话功能函数
[6]实现一个播放音乐功能函数
.....

面向对象程序员,思考方式:
[1]计算器是一个对象,包含一些数据和方法
[2]打电话是一个对象,包含一些数据和方法
[3]播放音乐是一个对象,包含一些数据和方法
...
面向对象程序员这时想到,自己以前写过一个计算器对象,写过一个打电话对象,写过一个播放器对象,他们之间是独立的,于是高富帅的干活方式出现了。啥也不用干,"ctrl +c" 和 "ctrl + v"把活干完了,然后去喝茶了。
面向过程程序员也不傻,看到面向对象程序员的干活方式,立马自己也"ctrl + c" 和 "ctrl + v"把自己以前编写的代码从n个文件的n行代码中寻找,找到之后发现自己的视力从+2.5下降到-2.5。不管咋地,咱就是这么任性,已经把代码拷贝过来,接下来就编译完,交给老大就可以去喝茶了。编译器疯了,变量名没有定义、变量名冲突,函数名冲突....,最后的结果是n行代码编译器无情的报了"n+1"行错误。
故事看到这,我们可以看出,面向对象编程的特点:
[1]万事万物都看成对象,对象包含数据和操作数据的方式,是一个独立的个体
[2]编写程序之前,先通过封装的方法设计出对象应该包含的内容
[3]整个软件系统由对象构成,就像这个人类世界一样,有n个人构成,每个人扮演者不同的角色
[4]代码的复用性好,更便于维护
二、 分段欣赏故事, 理解小熊克服困难的过程, 体会妈妈对小熊的爱 1. 出示课件, 讲述故事第一部分, 理解并表达小熊“克服三个困难” 的过程, 体会妈妈的爱和鼓励一直伴随着他 提问: (1) 拉拉要去旅行, 妈妈给了他什么。又如,上课伊始,我让学生边读、边思考、边画出描写英子神态动作的词语,边体会,学生在实践的过程中又掌握了一种阅读的好方法,还有在理解词语的过程中我渗透抓住重点词来理解文章由“忧郁”体会小英的内心世界。文/李谦子曾经,项目组一起讨论,如何让项目方案可以落地,讨论了很久,观点没有达成一致,后来发现,原来不同的人对“什么叫项目落地”这件事情理解不一样,但大体有三种理解:一、制定实操方案,教客户理解方案后由客户实施落地(陪客户到“知”的阶段)有的人认为制定一套实操的方案,案过程和客户充分沟通,再把方案的原理传递给客户,方案不会不着边际的漂在天上成为一堆纸,这就叫做落地性项目,这样的项目在做方案的任何一个细节,项目组都会充分考虑,这么做是否可实施。
二 Java面向对象之封装
我们知道,在面向对象的编程思想中,一个软件系统由n个对象构成。而对象需要先设计,就像前面我们用C语言的结构体来描述计算器一样。
typedef struct
{
int data1;
int data2;
int (*calc_add)(int,int);
int (*calc_sub)(int,int);
int (*calc_mul)(int,int);
...
}calc_t;
在Java 中,用可以用类来描述一个对象的特点:
class Calc{
int data1;
int data2;
int calc_add(){
return data1 + data2;
}
int calc_sub(){
return data1 - data2;
}
....
};
在C语言中的结构体内部是没法直接编写函数的,在Java的中是可以直接编写函数的,可以看出Java的类封装性更强。

问题1 : Java的类和C语言的结构体是一样的吗?
回答 : 相似,都是程序员设计出来的类型。
问题2: Java的类和对象有什么联系呢?
回答: 相当于C语言的结构体类型和结构体变量。
好了,接下来我们给出Java中标准的类定义方法:
接下来我们就来实战一下吧,设计一个描述人的类:


编译出现的错误如下:

修改完后,接着编译,出现的错误如下:

问题:在Java中如何给引用类型变量初始化呢?
回答: 让引用类型变量保存一个可用内存空间首地址就可以了。
类名 引用类型变量名;
引用类型变量名 = new 类名() 或 引用类型变量名 = new 类名(参数列表);
例如:
people = new Person();
好了,知道错误后,我们接着修改代码如下:
编译没有错误,输出如下结果:

嗯,还是有哥们写错,它的写法如下:

嗯,我们应该定义一个构造器,这样我们在创建对象后就可以自动给对象的成员变量进行初始化了,修改代码如下:

问题:如果创建一个对象时,我不想给构造器传递参数,我该怎么做呢?
回答:在类中在定义一个无参数的构造器。
修改代码如下:
三 Java中的访问修饰符public和private

还是通过列子说明吧!

monitor一般只用于访问引用类型的共享资源,如果将其施加于值类型变量,则值类型变量将会被装箱,而当调用exit方法时,虽然是同一个值类型变量,但实际上此值类型变量又会被第二次装箱,这将导致enter方法所访问的对象与exit方法所访问的不是同一个,monitor对象将会引发synchronizationlockexception。函数f()是类a的友元,且返回一个类a的对象,因为f()函数是类a的友元,所以在函数f中可以用默认构造函数创建类a的对象,这时函数f()同时是一个函数,也是类a的对象,因此也可以访问类a中的成员。定义父,成员变量,静态成员,初始化函数,父中,实例化,方法重载,python,一个,方法,定义,对象,可以,成员,函数,self,class,变量,从c#到python —— 4 类及面向对象 从c#到python —— 4 类及面向对象 从c#到python —— 4 类及面向对象,python,面向对象 从c#到python —— 4 类及面向对象,python,面向对象,3 self。
现在问题来了,具体什么时候用private修饰,什么时候用public修饰成员变量和成员方法呢?
大牛们这样回答你,类的成员变量都应该设为private,类的成员方法如果只是类内部使用则设为private,如果给外部使用则设为public。
试着思考这样一个问题:如果我们把成员变量设为public,这样在任何一个类中都可以随意访问。有一天编写类的人将成员变量名更改了,此时在别的类中使用过此类的成员变量的代码都需要修改。如果成员变量设为private,此时在别的类中是无法直接访问的,所以你做了修改是不会影响到别人的。
注意:我们封装的目的就是想隐藏一些细节,向外界提供统一的接口。

现在来了一个新的问题,把成员变量设为私有的,别的类中如何访问呢?嗯,聪明的你应该可以想到,通过类的公有方法,在公有方法中访问类的私有成员。于是乎代码修改成如下:

三 Java 中的this
1、表示对当前对象的引用!
2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下!
所以依赖倒转原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。 若type为一个符合二元函数对象的类型参数,则可通过typename type::first_argument_type表示它的第一个参数类型 对于普通函数,使用ptr_fun也可得到具备类型参数的函数对象 * 深度探索 迭代器的类型特征 若t为一迭代器类型,则可通过“iterator_traits ::特征名”得到相关类型参数,迭代器有以下特征: difference_type:表示两迭代器举例的类型 value_type:迭代器所指向数据的类型 pointer:迭代器所指向数据的指针类型 reference:迭代器所指向数据的引用类型 iterator_category:迭代器的分类标签 * 深度探索 例10-26 利用类型特征实现算法: * //将来自输入迭代器p的n个数值排序,将结果通过输出result输出 template class inputiterator, class outputiterator void mysort inputiterator first, inputiterator last, outputiterator result //通过输入迭代器p将输入数据存入向量容器s中 vector typename iterator_traits ::value_type s first, last 。在arg1中查找to_find子字符串,并返回一个整数表示它出现的位置.参数pos指定在参数arg1中开始搜索的位置.如果pos为正,则在该数字指定的位置开始搜索.如果pos为负,则在该数字指定的位置开始搜索,但位置指定是从字符串结尾处开始的.并且反向搜索.参数occurrence指定搜索第几次出现的了字符串.。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-99105-1.html
使得多余的男性成为女性的消费品