面向对象:"一切皆对象”的困惑
来源:互联网 发布:什么是数据库管理系统 编辑:程序博客网 时间:2024/05/19 21:17
一切皆对象,是非常好的哲学。而且,确实,面向对象会更加直观,明了。例如
length(str)和str.length比较起来,很明显,后者str.length更加直观,明了,可读写强多了。 但是,现实中存在很多困惑。下面也Java为例。
例如:
1. 控制台Console是否一个对象?
在Java中,打印一个字符串是,System.out.println("HelloWorld"); 这里面控制台是System.out。 但问题在于,控制台是不是一个对象呢?
假如换种写法:
"HelloWorld".sendToConsole(), 具有相同的功能和功效,含有是将字符串输出到控制台。
那么,那一种更加直观的表达了世界呢?
2. sendToConsole,将字符串写到控制台,这样看起来更合理。
但现实中,有很多数据,例如int,double,float等,每个类型都有sendToConsole,这样是不是显得这个方法很泛滥,那还不如
System.out.println(int),System.out.println(double),System.out.println(float)等更加统一。
自动判断输入的是int,还是double,还是float,然后将其转为string,然后再打印。
3. FileReader, ByteArrayInputStream等该不该是一个对象?
它们本身并不具有任何一个真正的实体,FileReader仅仅是File打开得到一个Reader,这只是封装方法集合而已。在Java中,什么都是Class情况,结果大量的XxxFactory,XXXReader,XxxxUtils,XXXHelper等大量的存在。但它们本质并不是一个对象。其实只是简单包装而已。这些东西都脱离了面向对象的意思,使得代码变得可读性差。
面向对象的目的是想将外部的东西表达得更自然,然而java中并非如此。大量非面向对象的class存在。大量的耦合代码在,加强了代码负担。
4. URL和url.openConnection
URL本身就是一种具有特殊格式字符串,这个封装为一种对象,无可厚非。但url居然有openConnection的方法,url打开了联接,显得很怪异?url跟连接什么关系。
在Java中,如果url中有http,则可以打开HttpConnecton,如果有ftp,则可以打开FtpConnection, 这样看起来封装很好。能够根据不同的协议打开不同类型的连接。非常完美。
但现实是URL和openConnection究竟什么关系? 结果是为了支持http,ftp,https进行过度封装,看起给用户封装起来的api很简单,但现实是里面的实现存在众多问题。用起来是简单的,但现实原理本质更加不清楚了。
5. java中有int,boolean, char, double, string, object 等类型,然后所有的操作是以这些类型。但现实中HttpConnection这样东西,究竟是什么样的东西呢?HttpConnection其实一个过程,具有时序的,并非静态对象。 这时候,面向对象,怎么表达一个过程呢?面向对象的过程呢?
6. async 是不是一个对象呢?Future,这个也是未来不可知的,虚假的东西,对吧。
7. Exception为何是一个对象?
在javascript中,我们看到一种更好的表示,例如HttpRequest中,如果失败了,则httpRequest.onFailed=function(){}。 如果失败了,则告诉你该做什么了。。。这样的表达,岂不是更正确。而在java中,如果出错了,throws IOException,抛出IOException,IOException是什么东西,其实什么东西都没有。你发现它只有message和stackException。
出错了,就抛出对象给你,但你也不知道这对象是谁抛的,抛给你干嘛。。。。。。
所以,java是面向对象,但真正用起来的时候,并非一定很直接。
- 面向对象:"一切皆对象”的困惑
- 面向对象的java,一切对象的起源Object
- 对象的困惑
- JavaScript 对象(一切皆对象)
- 一切皆为对象
- 一切皆对象
- 一切皆对象,X
- 一切皆对象
- 一切皆为对象
- python 一切皆对象
- 一切皆是对象
- Java一切皆对象
- js 一切皆对象
- 一切皆对象
- Rob Pike: 面向对象不是一切
- 第二章“一切皆对象”的笔记
- JS一切皆对象的由来
- 黑马程序员——一切皆对象:Java面向对象基础
- 各种Linux问题
- c++ 11 0x11 新特性之auto 及 for的自动迭代
- xp下安装win7/win8
- 存货的三个加权平均单价
- hadoop2.2.0 centos 编译安装详解
- 面向对象:"一切皆对象”的困惑
- 织梦dedecms会员注册成功后,直接跳转到验证的邮箱地址
- Uva 11464 - Even Parity(偶素矩阵)
- 基于遗传算法求解TSP问题(C#界面)
- [go]go版的ping测试程序(1)
- Linux网络套接字类封装
- Android中Acition和Category常量表
- Java桌面程序打包成exe可执行文件
- OpenCV学习小记(1)