ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java之 OOP编程思想理解1

2019-09-16 11:37:29  阅读:188  来源: 互联网

标签:Java 对象 编程 接口 OOP 基类 类型 存储空间


OOP

所有的编程语言都提供抽象机制。可以认为,人们能够解决问题的复杂性直接取决于抽象的类型和质量
·例如汇编语言和一些(非OOP)其他语言「如:BASIC、C等」都是主要针对计算机结构的抽象,所以在使用这些语言编程时,我们必须设法找到机器模型实际待解问题模型的关联。
·OOP思想的实质程序可以添加新类型的对象使自身适用于某个待解决的问题。因此,在阅读解决方案代码的同时,也是在阅读问题的表述。即:只对问题进行抽象。


每个对象都有一个接口

·每个对象都只能满足某些请求,这些请求由对象的接口所定义,决定接口的是类型


每个对象都提供服务

·将对象想象为服务提供者,程序本身也是向用户提供服务,它(程序本身)将通过调用其他对象提供的服务来实现这一目的。
· 所以,我们的目标是从现有代码库中寻找(优先)和自己创建能够提供理想服务的一系列对象。


被隐藏的具体实现

·类创建者构建的类,只向客户端程序员暴露必须的部分,而隐藏其它部分(即访问控制)。

Reason1: 让客户端程序员无法触及他们不该触及的部分。
Reason2: 允许类创建者可以改变类内部的工作方式而不必担心会影响到客户端程序员。


实现复用

method 1: 直接使用该类的对象。
method 2: 组合产生新类(可以在不干扰现有客户端代码的情况下修改其成员)。


继承

[继承现有类型时,便创建了新类型。有两种方法使得新类型与基类产生差异]
method1: (增加)直接在子类中添加新方法,即:子类“像是一个”父类。
method2: (覆盖)只改变基类现有方法的行为,因为它和基类具有完全相同的借口,所以它和基类是“是一个”的关系。


向上转型&单根继承结构

·向上转型后,能发出什么请求(能点出来什么)取决于基类是否有该接口,具体执行什么方法取决于对象的具体类型。
·单根继承(除C++外的所有OOP语言都是这样),简化参数传递、垃圾回收器的实现、异常处理等。


参数化类型

·容器:一种持有其他对象引用的对象,如java中的List,Map,Set等。

·在使用容器时,一般有两种储存方案
一是在置入时,将所有的存储对象向上转型为一个更泛化的类型,这样做虽然是安全的,但可能会丢失掉对象的许多实用接口;
二是从容器获取对象时,将其向下转型为将它置入容器时具有实用接口的对象,向下转型是非常危险的。那么,我们需要创建这样的容器,它知道自己所保存的对象类型,从而不需要向下转型,以及消除犯错误的可能。这种解决方案被称为参数化类型机制,参数化类型就是编译器可以自动定制作用于特定类上的类。 在Java中,称它为泛型


对象的创建和生命周期

· 将对象置于堆栈或限域变量或静态存储区域来实现。这种方式将存储空间的非配和释放置于优先考虑位置。为了追求最大的执行速度,对象的存储空间和生命周期可以在编写程序时确定,但是牺牲了灵活性。
· 在被称为堆堆内存池中动态的创建对象。对象的数量、生命周期、具体类型,只能在相关代码执行的那一刻才能确定。因为存储空间是在运行时被动态管理的,所以需要大量的时间在堆中分配存储空间,这一般要远远大于在堆栈中创建存储空间的时间,但其灵活性很高。
「Java完全采用了动态内存分配方式」


并发编程

· 线程是一种为单一处理器非配执行时间的手段。这可以使许多任务“同时”运行。
· 线程使得并发看起来非常简单,但有一个问题:共享资源。 解决问题的方法:某个任务使用某资源时将该资源锁定,完成其任务,然后释放资源锁,使其他任务可以使用这项资源。

标签:Java,对象,编程,接口,OOP,基类,类型,存储空间
来源: https://blog.csdn.net/weixin_45066859/article/details/100672092

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有