2019-7-22 [数据] 程序与数据

1.程序与数据概述

1.1数据概述

1.1.1 什么是数据?

“数据就是数值,也就是我们通过观察、实验或计算得出的结果。数据有很多种,最简单的就是数字。数据也可以是文字、图像、声音等。数据可以用于科学研究、设计、查证等。”

----来自百度百科

1.1.2 数据的意义

在现实生活中我们每天都围绕在各种数据中,认知数据,了解数据,总结经验,这是我们每天都会干的事;

数据对于我们来说非常重要,我们人生经验的积累主要就是对数据认知的多少,对于你来说数据认知的多了,你就特别聪明有着一个敏锐的头脑

反过来数据认知少了,你就什么也不知道,就很笨;所以我们对数据的认知和存储决定是我们是聪明还是笨的一个根本原因,再举个例子,电脑就比你聪明,这点不服不行!

所以问题就来了,我们想要聪明就必须多存储数据,那么我们怎么能够多多的存储数据让自己聪明呢?

这个问题很深奥,我们得慢慢说!
随着计算机的进步,用计算机保存数据已经成为当今社会这个数据大爆炸时代的必然需求,但是,同样有个问题也困扰着我们,计算机虽然能够大规模的保存数据,但是它没有思维,
它不能很好的帮助我们保存我们想要的数据(比如你想下各小电影看,你总不能对着电脑大喊我要看小电影把~~~)
所以怎么能够让计算机我们想要让计算机干嘛,如何与计算机更好的沟通,这就需要我们学习一些计算机编程技术了!
使用编程技术来管理计算机中的数据
在这里插入图片描述

1.2 程序概述

1.2.1 什么是程序?

计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。 -----来自百度百科

1.2.2 你为什么要写程序?

普遍认为 : 编程工资高,挣钱多,工作轻松,舒舒服服,月入几万不是梦,当上CEO,成为高富帅,赢取白富美,从此走上人生巅峰
真实情况 :

为什么要编程?那是因为要更好的和计算机进行沟通,但是机器语言哪是那么简单能够学会的?举个例子,就好比学英语,你觉得特别难那是因为英语不是你的习惯

编程也是这样,你要和机器打交道你就得学会和它沟通,之前我们用C语言和机器沟通,我们觉得太难,所以有了C++,后来C++还是太难有了Java,后来Java又觉得太麻烦

有了现在的Python;虽然编程语言换了很多批,但是学习难度依然很艰难,大数据,高并发,高安全,高容错的程序编写起来还真不是那么容易的;

所以作为一个程序员,编程主要是和计算机沟通,没沟通好,那么你编程能力就差,沟通好了编程能力就强,就是这么简单;但是如果想很好的和程序沟通,就必要要付出很多努力,所以未来的你应该是这样的

1.2.3 总结

我们进入了编程行业就需要明确两件事情,作为一个程序员我应该关心的是

1) 我的数据怎么存储?

2) 我的数据应该怎么操作?

当你能够明白这两件事情的时候,你就会发现你所有的程序都是围绕这个需求展开的!

1.3 程序与数据概述实战

项目需求 : 完成对人员数据的 添加 删除 修改 和 查询工作
需求分析 :
1) 定义实体 : 既然要对人员数据进行操作,我们首先要明确什么是人员数据? 什么样的数据才是人员呢? 如果我们把人员看成是一个群体,并且这个群体又是真实存在的,那么我们管这样的群体叫做实体
2) 描述实体: 上一步我们已经定义了人员实体,但是人员实体什么样,我们得需要描述,描述一个实体的样子我们称之为这个实体的属性,说到这大家就有想法了,实体如果定义成类 那么类中的属性就能够描述实体了!
3) 解决存储问题 : 保存实体数据可能会保存多个 数量不固定 所以优选应该是List集合
4) 解决操作的问题 : 数据可以保存了但是没办操作肯定不行,所以我们定义各种功能完成对数据的操作
在这里插入图片描述

package com.hnxy.test;
import java.util.Date;
/**
 * 人员信息实体类
 * @author My
 *
 */
public class Person {
	// 私有属性
	
	private Integer pid;	// 人员编号
	private String pname;	// 人员姓名
	private String sex;		// 人员性别
	private Date birthday;	// 出生日期
	private Double money;	// 存款金额
	
	// 共有方法	
	public Integer getPid() {
		return pid;
	}
	public void setPid(Integer pid) {
		this.pid = pid;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public Double getMoney() {
		return money;
	}
	public void setMoney(Double money) {
		this.money = money;
	}
	@Override
	public String toString() {
		return "Person [pid=" + pid + ", pname=" + pname + ", sex=" + sex + ", birthday=" + birthday + ", money="
				+ money + "]";
	}
}

此处我们需要补充一个定义
JavaBean
JavaBean 是一种JAVA语言写成的可重用组件。
为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。
JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。
众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。
一个JavaBean由3部分组成:
  
  (1) 属性(properties)
  JavaBean提供了高层次的属性概念,属性在JavaBean中不只是传统的面向对象的概念里的属性,它同时还得到了属性读取和属性写入的API的支持。属性值可以通过调用适当的bean方法进行。比如,可能bean有一个名字属性,这个属性的值可能需要调用String getName()方法读取,而写入属性值可能要需要调用void setName(String str)的方法。
  每个JavaBean属性通常都应该遵循简单的方法命名规则,这样应用程序构造器工具和最终用户才能找到JavaBean提供的属性,然后查询或修改属性值,对bean进行操作。JavaBean还可以对属性值的改变作出及时的反应。比如一个显示当前时间的JavaBean,如果改变时钟的时区属性,则时钟会立即重画,显示当前指定时区的时间。
  (2) 方法(method)
  JavaBean中的方法就是通常的Java方法,它可以从其他组件或在脚本环境中调用。默认情况下,所有bean的公有方法都可以被外部调用,但bean一般只会引出其公有方法的一个子集。
  由于JavaBean本身是Java对象,调用这个对象的方法是与其交互作用的唯一途径。JavaBean严格遵守面向对象的类设计逻辑,不让外部世界访问其任何字段(没有public字段)。这样,方法调用是接触Bean的唯一途径。
  但是和普通类不同的是,对有些Bean来说,采用调用实例方法的低级机制并不是操作和使用Bean的主要途径。公开Bean方法在Bean操作中降为辅助地位,因为两个高级Bean特性–属性和事件是与Bean交互作用的更好方式。
  因此Bean可以提供要让客户使用的public方法,但应当认识到,Bean设计人员希望看到绝大部分Bean的功能反映在属性和事件中,而不是在人工调用和各个方法中。
  (3) 事件(event)
  Bean与其他软件组件交流信息的主要方式是发送和接受事件。我们可以将bean的事件支持功能看作是集成电路中的输入输出引脚:工程师将引脚连接在一起组成系统,让组件进行通讯。有些引脚用于输入,有些引脚用于输出,相当于事件模型中的发送事件和接收事件。
  事件为JavaBean组件提供了一种发送通知给其他组件的方法。在AWT事件模型中,一个事件源可以注册事件监听器对象。当事件源检测到发生了某种事件时,它将调用事件监听器对象中的一个适当的事件处理方法来处理这个事件。
  由此可见,JavaBean确实也是普通的Java对象,只不过它遵循了一些特别的约定而已。
  完成各种功能 :

package com.hnxy.test;

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

public class Test1 {
		
	public static void main(String[] args) {
		// 存储数据
		List<Person> persons = new ArrayList<Person>();
		// 1. 测试添加
		// 需求 : 添加10个数据
		Person p = null;
		for (int i = 0; i < 10; i++) {
			p = new Person();
			p.setPid(i+1);
			p.setPname("用户"+i);
			p.setSex("男");
			p.setMoney(1000D);
			p.setBirthday(new Date());
			// 添加
			persons.add(p);
		}
		// 验证
		System.out.println(persons.size());
		// 修改ID为3的数据
		// 遍历找到 ID为3的数据再修改 
		for (Person person : persons) {
			// 修改ID为3的数据
			if(person.getPid() == 3){
				person.setPname("赵文明");
			}		
		}
		
		// 遍历
		System.out.println("删除之前:");
		for (Person person : persons) {
			System.out.println(person);
		}
		
		// 删除 删除ID为1的数据
		Iterator<Person> it = persons.iterator();
		while(it.hasNext()){
			Person p1 = it.next();
		    if(p1.getPid() == 1){
		        it.remove();
		    }
		}
		// 遍历
		System.out.println("删除之后:");
		for (Person person : persons) {
			System.out.println(person);
		}		
	}
}

此处需要注意使用iterator的remove方法,如果用list的remove方法同样会报上面提到的ConcurrentModificationException错误。

实战总结 :
刚才我们通过代码完成了对人员信息的操作,但是需要注意一个问题,我们现在的程序其实用户体验度不好,为啥?因为不能够很好的给客户进行效果上的展示,所以此时我们就需要继续往下学习,如何让我们的程序能够更快更好的展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值