干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析

Java开发的深入浅出-专栏总目录(持续更新) 文章目录引言I 、 基础概念II、 JVMIII、 案例:学术交流论坛系统的设计与实现see also 引言 欢迎大家来到#公众号:iOS逆向的《Java开发的深入浅出》专栏 本文列出学习大纲,同时这也可以作为大家学习《Java开发的深入浅出》这个专栏的索引。 文中的蓝字都是传送门,点击进入即可 I 、 基础概念 基本概念:【指令、基本术语、命名规范】 数据库概论 II、 JVM Java虚拟机:内存管理、GC(垃圾回收)、class文件的结构、JIT中比较常见的优化手段 III、 案例 阅读详情

前言

目前在软件开发领域有两种主流的开发方法:结构化开发和面向对象开发。结构化开发是一种比较传统的开发方法,早期的高级编程语言,如Basic、C. Fortran和Pascal等,都是支持结构化开发的编程语言。随着软件开发技术的逐步发展,为了进一步提高软件的可重用性、可扩展性和可维护性,面向对象的编程语言及面向对象设计理论应运而生,Java语言就是一种纯面向对象的编程语言。

干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析

 

一般说来,软件开发都会经历以下生命周期:

  • 软件分析:分析问题领域,了解用户的需求。
  • 软件设计: 确定软件的总体架构,把整个软件系统划分成大大小小的多个子系统,设计每个子系统的具体结构。
  • 软件编码:用选定的编程语言来编写程序代码,实现在设计阶段勾画出的软件蓝图。
  • 软件测试:测试软件是否能实现特定的功能,以及测试软件的运行性能。
  • 软件部署:为用户安装软件系统,帮助用户正确地使用软件。
  • 软件维护:修复软件中存在的Bug,当用户需求发生变化时( 增加新的功能,或者修改已有功能的实现方式),修改相应的软件。

为了提高软件开发效率,降低软件开发成本,一个优良的软件系统应该具备以下特点:

  • 可重用性:减少软件中的重复代码,避免重复编程。
  • 可扩展性:当软件必须增加新的功能时,能够在现有系统结构的基础上,方便地创建新的子系统,不需要改变软件系统现有的结构,也不会影响已经存在的子系统。
  • 可维护性:当用户需求发生变化时,只需要修改局部的子系统的少量程序代码,不会牵一发而动全身, 修改软件系统中多个子系统的程序代码。

架构化的软件开发方法简介

结构化开发方法主要是按照功能来划分软件结构的,它把软件系统的功能看作是根据给定的输入数据,进行相应的运算,然后输出结果,如下图所示。

干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析

 

进行结构化设计时,首先考虑整个软件系统的功能,然后按照模块划分的一些基本原则(比如内聚性和松耦合)等,对功能进行分解,把整个软件系统划分成多个模块,每个模块实现特定的子功能。为了提高软件的内聚性,在模块中还会把功能分解到更小的子模块中。在完成所有的模块设计后,把这些模块拼装起来,就构成了整个软件系统。软件系统可看作是多个子系统的集合,每个子系统都是具有输入/输出功能的模块,如下图所示。

干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析

 

结构化设计属于自顶向下的设计,在设计阶段就不得不考虑如何实现系统的功能,因为分解功能的过程其实就是实现功能的过程。结构化设计的局限性在于不能灵活地适应用户不断变化的需求。当用户需求发生变化,比如要求修改现有软件功能的实现方式或者要求追加新的功能时,就需要自顶向下地修改模块的结构,有时候甚至整个软件系统的设计被完全推翻。

在进行结构化编程时,程序的主体是方法,方法是最小的功能模块,每个方法都是具有输入/输出功能的子系统,方法的输入数据来自于方法参数、全局变量和常量,方法的输出数据包括方法返回值,以及指针类型的方法参数。一组相关的方法组合成大的功能模块。

面向对象的软件开发方法简介

面向对象的开发方法把软件系统看成是各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。面向对象的开发方法具有以下优点:

  • 把软件系统看成是各种对象的集合,这更接近人类认识世界的自然思维方式。
  • 软件需求的变动往往是功能的变动,而功能的执行者一对象一般不会有大的变化。这使得按照对象设计出来的系统结构比较稳定。
  • 对象包括属性 (数据)和行为(方法),对象把数据及方法的具体实现方式一起封装起来,这使得方法和与之相关的数据不再分离,提高了每个子系统的相对独立性,从而提高了软件的可维护性。
  • 支持封装、抽象、继承和多态等各种特征,提高了软件的可重用性、可维护性和可扩展性。这些特征将在后面的章节中详述。

广义地讲,面向对象编程是结构化编程的一种改进实现方式。传统的面向过程的结构化编程的最小子系统是功能模块,而面向对象编程的最小子系统是对象。

对象模型

在面向对象的分析和设计阶段,致力于建立模拟问题领域的对象模型。建立对象模型既包括自底向上的抽象过程,也包括自顶向下的分解过程。

(1)自底向上的抽象。

建立对象模型的第一步是从问题领域的陈述入手。分析需求的过程与对象模型的形成过程一致,开发人员与用户的交谈是从用户熟悉的问题领域中的事物(具体实例)开始的,这就使用户与开发人员之间有了共同语言,使得开发人员能彻底搞清用户需求,然后再建立正确的对象模型。开发人员需要进行以下自底向上的抽象思维:

  • 把问题领域中的事物抽象为具有特定属性和行为的对象。比如一个模拟动物园的程序中,存在各种小动物对象,比如各种小猫、小狗等。
  • 把具有相同属性和行为的对象抽象为类。比如尽管各种小猫、小狗等对象各自不同,但是它们具有相同的属性和行为,所以可以将各种小猫对象抽象为小猫类,而各种小狗对象抽象为小狗类。
  • 当多个类之间存在一些共性(具有相同属性和行为)时,把这些共性抽象到父类中。比如在前面的例子中,小猫类和小狗类又可以进一步归于哺乳动物类。

(2)自顶向下的分解。

在建立对象模型的过程中,也包括自顶向下的分解。例如对于计算机系统,首先识别出主机对象、显示器对象、键盘对象和打印机对象等。接着对这些对象再进一步分解,例如主机对象由处理器对象、内存对象、硬盘对象和主板对象等组成。系统的进一步分解因有具体的对象为依据,所以分解过程比较明确,而且也相对容易。所以面向对象建模也具有自顶向下开发方法的优点,既能有效地控制系统的复杂性,又同时避免了结构化开发方法中功能分解的困难和不确定性。

UML:可视化建模语言

面向对象的分析与设计方法,在20世纪80年代末至90年代中发展到一个高潮。但是,诸多流派在思想和术语上有很多不同的提法,对术语和概念的运用也各不相同,统一是继续发展的必然趋势。需要用一种统一的符号来描述在软件分析和设计阶段勾画出来的对象模型,统一.建模语言(Unified Modeling Language, UML)应运而生。

UML是一种定义良好、易于表达、功能强大且普遍适用的可视化建模语言。它吸取了诸多流派的优点,而且有进一步的发展,最终成为大众所共同接受的标准建模语言。

面向对象开发中的核心思想和概念

在面向对象的软件开发过程中,开发者的主要任务就是先建立模拟问题领域的对象模型,然后通过程序代码来实现对象模型。到底如何建立对象模型,如何用程序代码实现对象模型,并且能保证软件系统的可重用、可扩展和可维护性呢?

问题领域、对象、属性、状态、行为、方法、实现

问题领域是指软件系统所模拟的真实世界中的系统。随着计算机技术的发展和普及,软件系统渗透到社会的各个方面,几乎可用来模拟任意一种问题领域,如学校、医院、商场、银行、电影摄制组和太阳系等。

对象是对问题领域中事物的抽象。对象具有以下特性:

(1)万物皆为对象。问题领域中的实体和概念都可以抽象为对象。例如在学校领域,对象包括学生、成绩单、教师、课程和教室等:在银行领域,对象包括银行账户、出纳员、支票、汇率、现金和验钞机等;在商场领域,对象包括客户、商品、订单、发票、仓库和营业员等:在电影摄制组领域,对象包括演员、导演、电影、道具和化妆师等;在太阳系领域,对象包括太阳、月亮、地球、火星和木星等;在用Java语言创建的图形用户界面中,窗口、滚动面板、按钮、列表、菜单和文本框等也都是对象。

(2)每个对象都是唯一-的。对象的唯一性来自于真实世界中事物的唯一性。世界上不存在两片一模一样的叶子,因此在软件系统中用来模拟每片叶子的对象也具有唯一性。例如学校领域的学生小张、学生小王、小张的成绩单和小王的成绩单,这些都是唯一的对象。在Java虚拟机提供的运行时环境中,保证每个对象的唯一性的手段是为它在内存中分配唯一的地址。

(3)对象具有属性和行为。例如小张,性别女,年龄15,身高1.6米,体重40kg, 能够学习、唱歌和打羽毛球。小张的属性包括:姓名、性别、年龄、身高和体重。小张的行为包括:学习、唱歌和打羽毛球。例如一部手机:品牌名称是诺基亚,价格是2000元,银白色,能够拍照、打电话和收发短信等。这只手机的属性包括:品牌类型type、 价格price 和颜色color,行为包括拍照takePhoto()、 打电话call)、 收短信sendMessage(和发短信receiveMessage()。

同一个类的所有实例具有相同属性,表明它们的属性的含义相同,但是它们的状态不一定相同,也就是属性取值不一定相同。例如演员小红、小白和小黄,都有姓名、性别、年龄、身高和体重这些属性,但是他们的属性取值不同。

同一个类的所有实例包括类本身的所有实例,以及其子类的所有实例。类的所有实例具有相同行为,意味着它们具有一些相同的功能。类本身的所有实例按同样的方式实现相同的功能,而子类与父类之间,以及子类之间的实例则可能采用不同的方式来实现相同的功能。

类、类型

类是一组具有相同属性和行为的对象的抽象。类及类的关系构成了对象模型的主要内容。如下图所示,对象模型用来模拟问题领域,Java 程序实现对象模型,Java程序运行在Java虚拟机提供的运行时环境中,Java虚拟机运行在计算机机器上。

计算机受其存储单元的限制,只能表示和操作一些基本的数据类型,比如整数、字符和浮点数。对象模型中的类可以看作是开发人员自定义的数据类型,Java 虛拟机的运行时环境封装了把自定义的数据类型映射到计算机的内置数据类型的过程,使得开发人员不必受到计算机的内置数据类型的限制,对任意一种问题领域,都可以方便地根据识别对象、再进行分类(创建任意的数据类型)的思路来建立对象模型。

干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析

 

消息、服务

软件系统的复杂功能是由各种对象向电视机对象发送一个“开机”消息。电视机对象接受到这个“开机”消息,执行相应的开机操作。此外,遥控器还能向电视机发送其他消息,例如选择频道、调节音量、播放VCD和关机等。

干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析

 

每个对象都具有特定的功能,相对于其他对象而言,它的功能就是为其他对象提供的服务。例如电视机具有的功能包括:开机、关机、选择频道、调节音量和播放VCD等。遥控器为了获得电视机的服务,需要向电视机提出获得特定服务的请求,提出请求的过程称为发送消息。对象提供的服务是由对象的方法来实现的,因此发送消息实际上也就是调用一个对象的方法。

接口

既然每个对象是服务提供者,那么如何对外提供服务呢?对象通过接口对外提供服务。例如电视机的红外线接收器就是为遥控器提供的接口。再比如在日常生活中经常接触的电源插口,如果把整个供电系统看作-一个对象,那么它提供的主要服务就是供电。如何提供这一服务呢? 很简单,只要在住宅里布置好线路,提供一些电源插口,各种电器就能从电源插口中获得电源了。电源插口就是供电系统为各种电器提供的接口。此外,鼠标上的按钮、键盘上的按钮、洗衣机上的按钮、电灯的开关都是为用户提供的接口。

在现实世界中,接口也是实体,比如电源插口、洗衣机上的按钮和电灯的开关。而在面向对象的范畴中,接口是一个抽象的概念,是指系统对外提供的所有服务。系统的接口描述系统能够提供哪些服务,但是不包含服务的实现细节。这里的系统既可以指整个软件系统,也可以指一个子系统。对象是最小的子系统,每个对象都是服务提供者,因此每个对象都有接口。

在Java语言中,接口有两种意思:

  • 一是指以上介绍的概念性的接口,即指系统对外提供的所有服务,在对象中表现为public类型的方法的声明。
  • ​二是指用interface 关键字定义的实实在在的接口,也称为接口类型,它用于明确地描述系统对外提供的所有服务,它能够更加清晰地把系统的实现细节与接口分离。

封装

封装是指隐藏对象的属性和实现细节,仅仅对外公开接口。封装能为软件系统带来以下优点:

(1)便于使用者正确、方便地理解和使用系统,防止使用者错误修改系统的属性。还是以供电系统为例,过去房屋墙壁的.上方都是电线,现在的房屋里电线都“不见”了,在墙壁上只露出了一些电源插口。为什么要把电线藏起来呢?理由很简单,暴露在外面的电线不安全、也不美观。

再比如电视机系统,尽管它本身的实现很复杂,但用户使用起来却非常简单,只要通过遥控器上的几个按钮就能享受电视机提供的服务。电视机的实现细节被藏在它的大壳子里,没有必要向用户公开。

(2)有助于建立各个系统之间的松耦合关系,提高系统的独立性。当某一个系统的实现发生变化,只要它的接口不变,就不会影响到其他的系统。

(3)提高软件的可重用性,每个系统都是-一个相对独立的整体,可以在多种环境中得到重用。例如干电池就是- -个可重用的独立系统,在相机、手电筒、电动剃须刀和玩具赛车中都能发挥作用。

(4)降低了构建大型系统的风险,即使整个系统不成功,个别的独立子系统有可能依然是有价值的。例如相机损坏了,它的干电池依然有用,可以安装到手电筒中。

一个设计良好的系统会封装所有的实现细节,把它的接口与实现清晰地隔离开来,系统之间只通过接口进行通信。面向对象的编程语言主要是通过访问控制机制来进行封装的,这种机制能控制对象的属性和方法的可访问性。在Java语言中提供了4种访问控制级别:

  • public:对外公开,访问级别最高。
  • protected:只对同一个包中的类或者子类公开。
  • 默认:只对同一个包中的类公开。
  • private:不对外公开,只能在对象内部访问,访问级别最低。

继承

在父类和子类之间同时存在着继承和扩展关系。子类继承了父类的属性和方法,同时,子类中还可以扩展出新的属性和方法,并且还可以覆盖父类中方法的实现方式。覆盖也是专用术语,是指在子类中重新实现父类中的方法。

从每个对象都是服务提供者的角度来理解,子类会提供和父类相同的服务,此外子类还可以提供父类所没有的服务,或者覆盖父类中服务的实现方式。例如手机,早期生产的手机具有打电话的功能,但不具有拍照功能,现在的一些新款手机继承了打电话的功能,而且增加了拍照功能。

继承与扩展同时提高了系统的可重用性和可扩展性。例如,手机和计算机之所以能迅猛地更新换代,具备越来越多的功能,就是因为当厂商在生产新型号的手机和计算机时,他们不必从头生产,而是在原有手机和计算机的基础上进行升级。

继承与扩展导致面向对象的软件开发领域中架构类软件系统的发展。从头构建一个复杂软件系统的工作量巨大,为了提高开发效率,有一些组织开发了一些通用的软件架构。有了这些软件架构,新的软件系统就不必从头开发,只需要在这些通用软件架构的基础上进行扩展。

干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析

 

目前在Java领域比较流行的架构软件包括:

  • ​JavaEE:Oracle公司制定的分布式分层的企业应用的软件架构,它把企业应用分为客户层、JavaWeb层、应用服务层和数据库层。在JavaWeb层的扩展点主要是Servlet类和JSP,应用服务层的扩展点主要是EJB组件。
  • Struts: Apache开放源代码组织为JavaWeb应用创建的通用框架,采用模型一视图一控制器(Model-View-Controller, MVC)设计模式,它的最主要的扩展点是控制器层的Action类。
  • JSF:Oracle公司为JavaWeb应用的界面创建的通用框架。
  • Spring: Spring 开放源代码组织为企业应用的服务层创建的通用框架。

UML语言简介

1997年,对象管理组织(Object Management Group, OMG)发布了统一建模语言(Unified Modeling Language, UML)。UML的目标之一就是为开发团队提供标准、通用的面向对象设计语言。UML提供了一套IT专业人员期待多年的统一的标准 建模符号。通过使用UML,这些人员能够阅读和交流系统架构图和设计规划图,就像建筑人多年来使用建筑设计图一样。

干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析

 

UML采用一些标准图形元素来直观地表示对象模型,所以它是一种可视化的面向对象的建模语言。UML主要包含以下一些框图:

  • 用例图(Use Case Diagram):从用户角度描述系统功能。
  • 类框图(Class Diagram):描述对象模型中类及类之间的关系。
  • 状态转换图( State Transition Diagram):描述对象所有可能的状态,以及导致状态转换的转移条件。只需要为个别具有复杂的状态转换过程的类提供状态转换图。
  • 时序图(Sequence Diagram)和协作图(Cooperation Diagram): 描述对象之间的交互关系。其中时序图显示对象之间的动态协作关系,它强调对象之间消息发送的时间顺序,同时显示对象之间的交互;协作图能直观地显示对象之间的协作关系。这两种图合称为交互图。
  • 组件图(Component Diagram): 描述系统中各个软件组件之间的依赖关系,还可以描述软件组件的源代码的组织结构。
  • 部署图(Deployment Diagram):定义系统中软硬件的物理体系结构。它可以显示实际的计算机和设备(用节点表示),以及它们之间的连接关系,在节点中,还可以显示软件组件在硬件环境中的布局。

在以上框图中,其中用例图、类框图、组件图和部署图等4个图形,构成了系统的静态模型;而状态转换图、时序图和协作图则构成了系统的动态模型。因此,UML的主要框图也可以归纳为静态模型和动态模型两大类。

总结

本篇结合实际例子,探讨了如何运用面向对象思维来构建可维护、可重用和可扩展的软件系统。面向对象的核心思想和概念包括:抽象、封装、接口、多态和继承,灵活运用这些理论武器,就会使得软件系统像用积木搭起来的系统一 样,可以方便地进行组装、拆卸和重用。

喜欢文章请多多点赞评论转发,关注笔者,后续会再带来更丰富的学习内容更新,你们的支持就是笔者最大的动力!!!

java深入浅出 本书适合于java初学者学习;书中详细了介绍了java相关概念以及如何去学习java这门语言 立即下载

相关推荐

Head First Java(深入浅出 Java).第二版.中文完整高清

完整高清版本,贼清晰,这个书看着简单明了,适合新手,力推

Java深入浅出讲解

一、数据类型 基本类型 包装类型 缓存池 二、String 概览 不可变的好处 String, StringBuffer and StringBuilder String Pool new String(“abc”) 三、运算 参数传递 float 与 double 隐式类型转换 switch 四、继承 访问权限 抽象类与接口 super 重写与重载 五、Object ...

鲜衣怒马楼兰月 4027

京东联盟h5st(3.1)加密参数逆向实战与反爬对抗策略

本文详细解析了京东联盟h5st(3.1)加密参数的逆向分析与实战破解过程。通过接口分析定位关键加密函数,拆解h5st结构并还原其基于SHA256和HMAC-SHA256的加密逻辑,最终使用Python集成JavaScript环境成功复现加密算法,并分享了应对反爬的频率限制、IP封禁及算法升级等对抗策略。

weixin_29246195的博客 1740

Java深入浅出---------方法与数组

Java中的方法和数组

Ashle_MIN的博客 211

简易背单词系统C/C++

#include<stdio.h> #include<string.h> int F=20,N=100,k=0; int score[100]; int count=0; void hello(); void add(); void preview(); void mdelete(); void etc(); void cte(); void mscore(); void...

青木年华 9154

【ROS】usb_cam相机标定

1. 唠叨两句 当我们要用相机做测量用途时,就需要做相机标定了,不然得到的计算结果会有很大误差,标定的内容包括三部分:内参,外参还有畸变参数。所以标定的过程就是要求得上面这些参数。 以前弄这个事估计挺麻烦,需要做实验和计算才能得到,现在通过ros的开源包几分钟就能完成相机标定,感激! 具体的内外参和畸变系数的说明,可以看看Reference里面的第一个链接,写得很详细。 2. 准备工作 要准备三样东西: usb_cam的ROS启动包 相机标定的ROS包 还有一个用于标定的棋盘格 1)usb_cam启动包

Will_Ye的博客 8211

Java深入浅出---------数据类型与变量、运算符、逻辑控制和输入输出

Java深入浅出---------数据类型与变量、运算符、逻辑控制和输入输出

Ashle_MIN的博客 836

生成mm grounding dino的onnx模型并在x-anylabeling中使用

X-AnyLabeling 是一款cvhub开发的交互式自动标注工具,其基于AnyLabeling进行构建和二次开发,在此基础上扩展并支持了许多的模型和功能,并借助Segment Anything和YOLO等主流模型提供强大的 AI 支持。其最新版基于grounding dino可以实现开放词汇检测及生成掩码。2024年,MMDet 3.3.0提出了 MM-Grounding-DINO。

blanokvaffy的博客 1733

Java深入浅出------------初识Java

Java深入浅出---------初识Java

Ashle_MIN的博客 929

RAGFlow体验大提升:使用GPU加速

场景:在正常部署过程中,启动RAGFlow会用到docker-compose.yml文件来启动。但是在实际使用过程中,会发现RAGFlow极其的卡和笨重,给一一种很不好的用户体验,有没有一种可以让RAGFlow加速的呢?进入RAGFlow的docker目录下会有发现有很多docker的配置文件。方法一:选择docker-compose-gpu.yml这个来启动项目。两个方法选其一 ,就会让你的RAGFlow的使用起来非常的丝滑!方法二:在docker-compose.yml末尾加上。

Ven%的博客 3160

数据分析案例-电脑笔记本价格数据可视化分析3

本文基于Kaggle笔记本数据集(1303条记录,13个变量),使用Python进行数据可视化分析。通过自定义函数预处理了CPU频率、内存类型等关键特征,利用Seaborn和Matplotlib绘制了品牌分布、内存类型占比、价格影响因素等可视化图表。研究发现:1)Dell和Lenovo市场份额最大;2)SSD是主流存储类型;3)高RAM配置普遍采用SSD;4)Intel处理器占据绝对优势。分析揭示了不同品牌、配置与价格的关系,为消费者购买决策和市场策略制定提供了数据支持。

m0_64336780的博客 1万+

2024年最新干货!详解Java面向对象开发方法,看清华大牛带你深入浅出剖析,mysql的事务隔离级别面试题

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取面向对象的开发方法把软件系统看成是各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。

2301_82244514的博客 428

手把手教你学Simulink--基于Simulink的开关磁阻电机电流斩波控制仿真建模

特点:定子和转子均由普通硅钢片叠压而成,没有永磁体或绕组在转子上。工作原理:利用转子旋转时不同位置的磁阻变化产生转矩。控制挑战:由于SRM的高度非线性和磁饱和效应,需要复杂的控制算法来优化性能。利用Simscape Electrical中的模块构建SRM的物理模型,配置参数如电阻、电感等。matlab深色版本% 添加SRM电机模块根据实际需求调整电机参数。通过上述步骤,我们简要介绍了如何基于Simulink进行开关磁阻电机的电流斩波控制仿真建模。

MHD0815的博客 306

所有方向你要的资料干货这都有,从入门到实战!【优快云宝藏资料图鉴第一期】

前言 优快云 是全球知名的开发者社区,创建于1999年,经过20来年的知识文档积累已然成为中文开发者的知识宝库;从基础的法入门到蜕变实战案例、从神秘前沿技术到清晰的实践步骤,可以说优快云是你找寻资料的最佳宝库,只要你想得到,在这里就可以找得到! 今天我们就来深拔一期有质量的专栏和资源,这些专栏作者可能有些是在校大学生、有些是某领域内的行内大牛,但并不影响他们的文章通俗易懂并且富有深度。从在校大学生我们看到了新一代的奋进,从领域大牛身上我们也看到了无私的技术分享,希望有质量的文章越来越多,共同为行业的进步

1_bit 的博客 2万+

基于生存结局(生存分析/COX回归)的中介效应分析

① 建立观察变量OVB和中介变量MVB的回归模型(注意:这里根据mediation包的介绍,需要构建的是probit模型,而不是logist回归模型,网上有很多的代码用的logistic回归,结果自己跑的时候发现报错,我在这里陷了很久;为了方便演示,我们生成了一个协变量(Age)、一个连续型观察变量(liaOVC)、一个二分类观察变量(OVB)、一个连续型中介变量(MVC)、一个二分类中介变量(MVB)以及最后的结局变量(生存时间[time],生存结局[stats])。

m0_61863309的博客 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

跟着阿里大牛捞干货:2019这5本书带你玩转大数据

导读:2019年,你都立了哪些flag?等一年之后回头看看,这些flag都能拔掉吗?其实新的一年已经过去一周多了,这一周你是怎样过的,有没有一点小小的进步?为了让你的20...

大数据 3155

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

阿里大牛的Java后端书架来啦,都是Java程序员必看的书籍

这篇文章推荐的都是我所读过的优秀书籍,部分可能没看完。答应我,一定要看到最后,看完之后应该不会再纠结要看什么书了。走起!!! 这篇文章未涵盖计算机基础比如算法和数据结构、数据库、分布式、微服务方面的书籍,这个留在下一篇文章推荐。 Java 基础 《Head First Java》 LZ 的 Java 启蒙书籍了。因为是我学习 Java 看的第一本书,所以,我对其有不一样的情感。 ps:我是当时学完了 C 语言之后才开始学习 Java 的,刚开始看这本书感觉很轻松有趣,可以说是我学.

一入Java深似海 2076

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

大牛手把手带你!mysql详细教程

一、对Kafka的认识 1.Kafka的基本概念 2.安装与配置 3.生产与消费 4.服务端参数配置 二、生产者 1.客户端开发 2.原理分析 3.重要的生产者参数 三、消费者 1.消费者与消费组 2.客户端开发 四、主题与分区 1.主题的管理 2.初识KafkaAdminCilent 3.分区的管理 4.如何选择合适的分区数 五、日志存储 1.文件目录布局 2.日志格式的演变 3.日志索引 4.日志清理 5.磁盘存储 六、深入服务端 1.协议设计 2.时间轮 3.延时操作 4.控制器

m0_57768035的博客 101

j2ee大作业代码包_跟着阿里大牛捞干货:2019这5本书带你玩转大数据

导读:2019年,你都立了哪些flag?等一年之后回头看看,这些flag都能拔掉吗?其实新的一年已经过去一周多了,这一周你是怎样过的,有没有一点小小的进步?为了让你的2019年过得充实,不虚度,数据叔今天推荐5本书,作者都是来自于阿里的技术大牛,内容都是跟当前持续火爆的大数据行业相关。吃透他们的任何一本书,2019你就是人生赢家。1《Python自然语言处理实战:核心技术与算法》作者:涂...

weixin_35682010的博客 154

大牛带你直击优秀开源框架灵魂,妈妈再也不用担心我找工作了!

前言 本人是底层 211 本科,刚毕业,⽆科研经历,但是有些项⽬经历。 在国内监控行业某头部企业做过一段时间的实习。 想着投下字节,可以积累⼀下⾯试经验和为金九银十面招做准备。投了简历之后,过了一段时 间,HR 就打电话跟我约时间, 说明一下,我投的是北京 office。 以下就是一个面试的全部过程,分享出来给感兴趣的朋友们一看。 梳理知识点,是快速提升技术的关键 前面讲过,快速提升自己的技术硬实力其实是有方法的。大致就是梳理知识点+夯实基础+进阶深入学习+实战,下面我会一点点跟大家剖析,本文干货满满,大

m0_56830858的博客 210

赠书啦!跟阿里大牛捞干货:2019年带你玩转人工智能、大数据!福利见文末!...

云栖君导读:2019年,你都立了哪些flag?等一年之后回头看看,这些flag都能拔掉吗?为了让你的2019年过得充实,不虚度,阿里云云栖社区 联合 华章图书 为大家带来...

云栖社区 468

Java开发需要学什么!java位运算详解

前言 现在刷抖音经常可以看到一些老外街坊,问他们最想把什么带回自己的国家,我听过很多的回答都是:淘宝,支付宝,美食,微信,外卖,高铁等等。 确实如此,随着国家的快速发展吸引了不少国际上羡慕的目光,更让中国的新四大发明走向世界。说到这些,都离不开背后庞大的互联网体系的支撑,阿里作为国内最顶级的互联网企业必然也聚集了行业内顶级的IT人才。 众所周知,阿里巴巴的主要开发语言就是Java,而对于Java开发者来说,最重要的就是学习Spring框架了。现在,我想跟大家分享出这份老外看外都不禁赞叹的《阿里技术官Spri

m0_57983312的博客 78
上一篇: 送给处于瓶颈期的你!89年架构师结合项目实战,踏平你的Java开发之路
下一篇: TCP协议漫谈,深入浅出实战网络编程开发,带给你不一样的认知
Java领域指导者
博客等级 码龄7年 404粉丝 265原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值