java—面向对象【学习笔记1】

面向对象

 面向对象与面向过程的区别 

   面向过程

   面向对象 

   比较

 类和对象

   类

   对象 

   类和对象的区别 

            对象的属性和方法的调用

            UML统一建模语言

            对象属性的默认值问题    


 面向对象与面向过程的区别 

   面向过程

面向过程是以过程为中心的思想,这些都是以什么正在发生为主要目标进行编程。

 简单来说,就是分析要解决的问题所需要解决的步骤,然后一个一个写出功能函数并依次调用,举个例子:比如说我们想做一份炸薯条 我们就要做如下的步骤

0、我们要够买所需的食材。

1、首先将土豆削皮,泡水后切条状,将土豆条泡水防止氧化。

2、锅中坐水,水开后放入土豆条焯两分钟,捞出过凉水。

3、沥干水分后放入保鲜袋中,放入冰箱冷藏。

4、锅中倒油,放入土豆条炸至浅金黄,复炸,炸至表面金黄捞出装盘,配上番茄酱。

5、美味的薯条就完成了。(这里的每个步骤都是我们亲自参与)

  面向对象 

面向对象 就是把我们需要的功能封装到一个类里,在我们需要时通过对象调用功能模块。 

当面向封装了具体功能类,若要使用这个类,一般情况下,在Java中需要通过创建这个类的实体来使用。这个实体称之为对象。

在开发中,我们是在不断的找封装不同功能的类。基于这些类,创建其对象,使用这些对象完成相应的操作。

举个例子:还是上面的炸薯条

                  我直接点个外卖,或者直接在店里买,它不香吗?(我们其实调用了有会做出薯条功能的店员对象,和有帮我们取薯条功能的外卖员对象)

通过上面的讲解和分析得出:面向对象是基于面向过程,对象是将功能进行了封装。

只要找到了具体的类,创建出对象,就可以调用其中的具体功能。

面向对象也是用来解决问题的一种思维模式。 在以后开发中,先找对象,调用对象中的具体功能。如果真的没有能够完成需求的对象,这时就自己创建对象,并将所需的功能定义到对象中,方便以后使用 

     比较

  项目                   面向对象程序设计              面向过程设计(结构化设计)
  特点                   封装,继承,多态                    算法+数据结构
  优点易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
  缺点性能比面向对象低没有面向对象易维护、易复用、易扩展
 设计   语言Java、Smalltalk、EIFFEL、C++、Objective-、C#、Python等                        C、Fortran

 类和对象

       类

  •  是 一种共性的特征,是一种抽象的概念集合在类中定义的是属性和行为(方法)。

             属性:一个人的静态特征,例如:身高,体重……

             方法:一个人懂的动态行为,例如:吃饭,洗澡,睡觉……

  • 类必须编写在.java文件中。
  • 内部类才可以被声明为静态类。
  • .java文件的文件名必须与public修饰的类名完全一致。
  • 一个.java文件中,可以存在多个类,但是只能存在一个public修饰的类。

       对象 

  • 对象的含义是指具体的某一个事物,即在现实生活中能够看得见摸得着的事物。(书本,学生,动物……)
  • 在面向对象程序设计(OOP)中,对象所指的是计算机系统中的某一个成分。
  • 在面向对象程序设计中,对象包含两个含义,其中一个是数据,另外一个是动作。
  • 对象则是数据和动作的结合体。
  • 对象不仅能够进行操作,同时还能够及时记录下操作结果。

       类和对象的区别 

 类和对象的区别:类是对象的抽象,对象是类的实例。类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象。类不能直接使用,对象是可以直接使用的。

        定义类与对象 

        定义类  我们要用class关键字

class 类名称 {
         属性 (变量) ;
         行为 (方法) ;
}

         对象的声明方式;

// 声明的同时并实例化对象
类名称 对象名称 = new 类名称 () ;

// 先声明对象 再实例化
类名称 对象名称 = null ;
对象名称 = new 类名称 () ;

        因为类是引用数据类型:  引用数据类型需要内存空间的分配和使用。

        关键字new :分配内存空间

      对象的属性和方法的调用

   对象的属性赋值
       对象名称.属性名称 = 值;
       如果访问属性的值
       对象名称.属性名称 

  调用对象的方法
       对象名称.方法名称([参数列表]);

   案例1

public class Person {
     //属性
	 String name;
	 int age;
	 boolean gender;
	 String email;
	 String telphone;
	 double height;
	 float weight;
	 
	 //行为
	 public void speak() {
		 System.out.println("hello world");
		 System.err.println("我的名字"+name+"年龄" + age);
	 }
	 
	 public static void main(String[] args) {
		 //创建对象
		 Person p = new Person();
		 
		 //为对象进行属性赋值
		 p.name = "日向翔太";
		 p.age = 16;
		 p.gender=false;
		 p.email="120@qq.com";
		 p.telphone = "120";
		 p.height= 165;
		 p.weight= 110;
		 
		 // 调用对象的方法
		 p.speak();
	 }
}

     案例2:求圆与三角形的面积与周长 

import java.util.*;
public class TestS1 {
    public  static class Circle{
    	 //为该类提供一个变量r表示半径,一个常量PI表示圆周率
        public double r;
        public final double PI = 3.14;

        //方法一用于求圆的面积
        public void area() {
            System.out.println("");
            System.out.println("圆的面积为:" + PI * r * r);
        }

        //方法二用于求圆的周长
        public void girth() {
            System.out.println("");
            System.out.println("圆的周长为:" + 2 * PI * r);
        }
    }
    public static class  Strange{
    	  double a, b, c;
    	  public double area() {
    		   double p = (a+b+c)/2;
              return Math.sqrt(p*(p-a)*(p-b)*(p-c));
          }

          public double girth() {
        	  return a+b+c;
          }
    }

     public static void main(String[] args) {
          Scanner sc = new Scanner(System.in);
          System.out.println("请输入圆的半径 ");
          double r = sc.nextDouble(); 
          
          Circle c = new Circle();
          c.r=r;
          c.area();
          c.girth();
          
          
          Strange str = new Strange();
          System.out.println("请输入三角形的三边 ");
          str.a = sc.nextDouble(); 
          str.b = sc.nextDouble(); 
          str.c = sc.nextDouble(); 
          System.out.println("三角形的面积 " + str.area());
          System.out.println("三角形的周长 " + str.girth());
      }
}

      案例3:两点之间的距离 

public class Point {
	
	public int x;
	public int y;
	
	// 求两点间的距离
	public double getDistance(Point p2) {
		return Math.sqrt((x - p2.x) * (x - p2.x) + Math.pow((y - p2.y), 2));
	}
	
	public static void main(String[] args) {
		Point p1 = new Point();
		p1.x = 3;
		p1.y = 3;
		
		Point p2= new Point();
		p2.x = 0;
		p2.y = 7;
		
		
		System.out.println(p1.getDistance(p2));

		
	}

       这里使用 对象名称.方法名称([参数列表]);的方式,参数列表里是p2这个对象

        UML统一建模语言

统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言  

        分类:用例图 ,类图,对象圈,活动图,状态图,序列图,协作,构件图,部署(配置图)

类图

  •    专业术语:
  •         OO(Oriented Object):面向对象
  •         OOA(Oriented Object Analysis):面向对象的分析
  •         OOD(Oriented Object Desgin):面向对象的设计
  •         OOP(Oriented Object Programming):面向对象的编程
  •         OOT(Oriented Object Test): 面向对象的测试

        对象属性的默认值问题    

        考虑到C++,因为类属性如果没有赋予初始化,默认值随机!!!
        java将对象的属性都给与了默认值

             对象的属性的默认值
             java中存在默认值:
                   整数:0
                   浮点数:0.0
                   布尔:false
                   char:''
                   对象:null

public class User {
	
	public String username;
	public int age;
	public double weight;
	public float height;
	public char gender;
	public boolean isLive;
	
	public void showInfo() {
		System.out.println(username + "--"+ age 
				+ "---"+ weight + "----"+ height 
				+"--"+ gender + "---"+ isLive);
	}
	
	public static void main(String[] args) {
		// 创建了对象
		User u1 = new User();
		// 第二步:为对象的属性赋值了
		u1.username = "张三";
		u1.age = 16;
		u1.weight = 120;
		u1.height = 170;
		u1.gender = '男';
		u1.isLive = true;
		// 打印属性
		u1.showInfo();
		
		
		User ldh = new User();
		ldh.showInfo();
		
		
	}
	

}

运行结果:

张三--16---120.0----170.0--男---true
null--0---0.0----0.0--

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值