谈一下我对OOP的了解
谈一下我对OOP的了解
OOP也就是面向对象(Object Oriented Programming。 据我们所知,早期的计算机语言是面向过程,但是那时所要解决的问题都不是很难,通常一个算法就可以解决的问题。 随着计算机的发展和我们所遇到的问题越来越复杂,为了解决这些问题,人们提出了面向过程(OOP)。 生活中的一切事物都会有属性和行为,也就对应着是计算器语言的属性和方法。
举一个我在网上看见的很简单的例子,我也觉得很容易理解。
有一天比如你想吃青椒肉丝了。 此时我们有两张办法:
1.去菜场买菜, 青椒,肉丝,姜蒜等材料。
2. 直接去饭店说 老板我要一份青椒肉丝。
1就是面向过程,2就是面向对象。
如果此时你不想吃青椒肉丝了,比如想吃麻婆豆腐了, 你就需要重新去菜场买菜,那就有点麻烦了。2的话,你可以跟老板说 老板还一份麻婆豆腐。
面向对象可以降低耦合性, 我们不用知道做饭的这个过程,提高了维护性。
反之,面向过程却需要一步一步的解析问题。
OOP有三个特性:
1.封装性
让抽象的事物保护自身的状态,防止非其他事物对其进行错误的状态改变操作。我们抽象完一个事物后,可能在特定的条件下,其本身的状态需要改变,但是这个改变并允许其他的事物来进行,这样的改变只允许这个事物认同的操作域来进行,可以是该事物本身,也可以是它信任的其他事物。这样我们就能对我们抽象完的每个事物进行自身数据的保护。
举例来说明吧
public class example{public int sum(int a, int b){// a+b的和// 返回一个sum值}
}
我拿给别人用,别人就只用知道这个是求和就好,别人不用知道我怎么实现a+b, 只用知道结果就好。
2.继承性
让抽象出来的事物具有本应该具有的联系。我们能用类来描叙一个抽象的事物,同时能用对象来描叙具体的事物,但是这些事物都是独立的,彼此之间没有应该有的联系,这样的孤立设计并不符合现实逻辑,让事物之间的联系得到描叙,我们就需要继承,例如:发明自行车的人并不是一开始就发明了多人自行车,这些都是从双轮自行车演变和发展而来,但是他们都有共同的特点,有轮子,有车架子,等等。让我们用继承的关系把这两个现实的抽象联系起来,这样我们就能设计出不孤立的类,而是和其他类有联系的类
正如继承两次,就是继承了上一代的属性和方法,还是举例来说吧。
我们先来定义一个父类。
public class A{String name;int age;public void grow(int grow){age += grow;}
}
好了, 然后我们再来写一个子类B, 来继承A
public class B extends A//从a类继承{String name;int age;public void grow(int age){age+=grow;}// 此时b类有一切a类的属性和方法,并且还可以自己增加新的方法public void changeName(Strinng nm){this.name = nm;// 此时b还可以访问a的属性}
}
这就是oop的继承性, 可以增加代码的可重用性,拓展性,修改性。 我们想修改拓展时不用去重写整个对象,直接继续修改即可。
3.多态性
多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是对同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:方法重写和对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。
多态性是基于继承性来说,所以放到最后。多态性最简单的来说可以重写继承对象的方法。
谈一下我对OOP的了解相关推荐
- 浅谈javascript的面向对象(OOP)
1. 什么是JavaScript JavaScript 是一种描述性的脚本语言(Script Language),它可以非常自由地被嵌入到HTML 的文件之中.使用JavaScript 可以做什么呢? ...
- BAT无线工程师面试流程详细解析
原文出处:http://www.jianshu.com/users/3bbb1ddf4fd5 简书Tamic ,http://www.jianshu.com/p/f0d2ed1254a9 求职和我们每 ...
- C++ Style and Technique FAQ (
C++ Style and Technique FAQ (中文版) Bjarne Stroustrup 著, 紫云英 译 [注: 本访谈录之译文经Stroustrup博士授权.如要转载,请和我联系 ...
- 面向对象编程---上
目录 学习面向对象内容的三条主线 一.面向过程与面向对象 二.Java基本元素:类和对象 三.对象的创建(new)和使用(.) 四.类的成员之一:属性 五.类的成员之二:方法 理解"万事万物 ...
- (接口)让僵冷的翅膀飞起来---从实例谈OOP、工厂模式和重构
有了翅膀才能飞,欠缺灵活的代码就象冻坏了翅膀的鸟儿.不能飞翔,就少了几许灵动的气韵.我们需要给代码带去温暖的阳光,让僵冷的翅膀重新飞起来.结合实例,通过应用OOP.设计模式和重构,你会看到代码是怎样一 ...
- 让僵冷的翅膀飞起来—从实例谈OOP、工厂模式和重构[by Wayfarer]
有了翅膀才能飞,欠缺灵活的代码就象冻坏了翅膀的鸟儿.不能飞翔,就少了几许灵动的气韵.我们需要给代码带去温暖的阳光,让僵冷的翅膀重新飞起来.结合实例,通过应用OOP.设计模式和重构,你会看到代码是怎样一 ...
- php oop 效率,浅谈PHP的oop
在PHP的论坛中总是听到有人对PHP的OOP支持说三道四的,说这有缺陷,那里不足,但是都拿不出实际的例子. 原来说过要和大家说说这事,但是一直很忙,现在算是抽了些时间了,所以把我刚刚做过的一个项目的框 ...
- 浅谈OOP(Object-oriented programming)
最近看一个视频很有感同身受就写了这篇文章 把编程语言按照面向过程,面向对象,函数式来分类.这种分类方法是有很大问题的,因为他把问题想得过于简单了 你一定听过很多人说Java是面向对象语言,C是面向过程 ...
- 我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承...
当今的IT领域,SOA已经成为了一个非常时髦的词,对SOA风靡的程度已经让很多人对SOA,对面向服务产生误解.其中很大一部分人甚至认为面向服务将是面向对象的终结,现在的面向对象将会被面向服务完全代替. ...
- 从头开始写框架(一):浅谈JS模块化发展
博客申请下来已经过去一个月了,一直不知道写点什么,毕竟我的文笔不是很好orz. 不过既然申请下来了,不写点什么总是觉得很可惜.正好最近在自己写框架,就把自己的进程和一些心得体会分享出来吧. 写在前面: ...
最新文章
- HarmonyOS UI开发 StackLayout(堆栈布局) 的使用
- 切割图形_模型教程丨切割机使用——结合实例
- 互联网架构师必备技术 Docker仓库与Java应用服务动态发布那些事
- ceph-deploy出错UnableToResolveError Unable to resolve host
- C语言(CED)统计行数
- 华为机试HJ90:合法IP
- 【编辑器】常用编程环境使用感受20190804
- html返回按钮 超链接,ppt超链接返回键
- centos yum 第三方仓库 scl 应用
- 解决Dev-C++ [Error] ‘for‘ loop initial declarations are only allowed in C99 or C11 mode
- 超链接一般有两种表现形式_超级链接有哪些常见的表现形式?
- 从盘古开天辟地说起JVM性能调优
- softmax和sigmod的pytorch这些
- Redis学习之缓存数据类型
- Python seaborn.barplot绘图将纵轴设置成百分比形式
- 上海常英计算机技术有限公司,工科男博士恋上理科女博士 脚踏单车千里求婚...
- 树莓派控制Dobot遇到的问题
- java.util.Date java.sql.Date
- php 根路由器,Pux
- pdf文件【扫描版】转 【文字版】