(一) 写在前面
- 2020.11.01
此时已是国内疫情稳定了的时候,作为正赶上疫情为大学关键时期的一名应届生,在导师的介绍下学习博客的使用,以总结自己IT成长的历程。 - 其实在去年(2019年),我已经是一名大三的学生,说急不急,也是要到了找实习的时候了。但正赶上疫情在家封住了脚步,安逸便像一颗隐形的毒药埋下了种子。等到回过头来,返校在即已是应届毕业生,找工作巨大的能力落差让我每每缓不过神来……
- 所幸一次机遇结识了自己的导师,在与他的倾心交谈中,才客观的看到大四的就业模式和未来一些的规划与可能的结果。在了解到我的基础功底之后——他劝我放弃秋招,全力准备春招。获益匪浅。
- 其实对于打击这种东西,我是挺喜闻乐见的。因为自身属于不撞到墙上都不知道疼的那种,所以对于自己的方向与动力,经过很长一段时间的心路历程之后,便坚定了许多。
- 我选择扎实的从头开始,没有退路了。
(二) 学习心得
1.面向过程
在之前接触C语言的时候,只感觉它是一种神奇的语言,就好像在电脑上写日记一样,便可以将一件事情完成。
至于如何去“完成”这件事,每个人的路无需相同,只需要达成预期相同的目的即可。
即只注重结果。
#include"stdio.h"
#include"stdlib.h"
typedef struct node{
int data;
struct node *next;
}ElemSN;
ElemSN *CreatLink(int Data[],int n);
void DelKeyNode(ElemSN *h,int key);
void PrintLink(ElemSN *h);
int main(void)
{
int Data[12]={4,3,2,4,5,3,4,2,4,8,2,1};
int key;
printf("请输入关键字key:\n");
scanf("%d",&key);
ElemSN *head;
head=CreatLink(Data,12);
DelKeyNode(head,key);
PrintLink(head);
}
ElemSN *CreatLink(int Data[],int n)
{
ElemSN *h=NULL,*p;
h=p=(ElemSN *)malloc(sizeof (ElemSN));
h->next=NULL;
for(int i=0;i<n;++i){
p=p->next=(ElemSN *)malloc(sizeof (ElemSN));
p->data=Data[i];
p->next=NULL;
}
return h;
}
void DelKeyNode(ElemSN *h,int key)
{
ElemSN *p,*delp;
for(p=h;p->next;p=p->next)
if(p->next->data==key){
delp=p->next;
p->next=p->next->next;
free(delp);
}
}
void PrintLink(ElemSN *h)
{
ElemSN *p;
for(p=h->next;p;p=p->next)
printf("%d",p->data);
}
这是我练习链表时写的C程序,那时内存空间使用能力很差,也根本不会有规范性的意识。
其实看来难免有些记流水账的味道。
2.面向对象
其实说起来这个概念在第一次接触Java的时候,便没有感觉有多么新奇,听着导师的演示,也不尽能体会抽象到思维的不同之处。
import java.util.Scanner;
public class HandWay {
public void show() {
int count = 0;
while (1 == 1) {
count++;
Scanner in = new Scanner(System.in);
System.out.println("1.石头\t 2.剪刀\t 3.布");
System.out.println("请出拳:");
int hand = in.nextInt();
Judge judge = new Judge();
Computer computer = new Computer();
judge.compare(hand, computer.go());
System.out.println("1.是\t 2.否");
System.out.println("是否继续:");
int i = in.nextInt();
if (i == 2){
System.out.println("游戏结束!");
Player player = new Player();
judge.end(player.grades, computer.grades);
System.out.println("您一共玩了"+ count + "把。获胜" + player.grades + "把,失败" + computer.grades + "把。");
break;
}
}
}
}
于是真是应会了那一句:
“脑袋和眼睛说:我们明白了!
手说:你俩开玩笑呢!”
上面是一个面向对象小项目中自己码失败的一段,目的是为实现“猜拳”这一小游戏。
早已习惯了记流水账的直线思维,每次去描述一个类的时候,都恨不得一股脑的将所有功能都塞进去。于是就算描写出了可以实现功能的代码,也发现根本没有东西创建第二个类了。
import java.util.Scanner;
public class Users {
public String name;
public int score;
public String way;
public int showHand() {
Scanner in = new Scanner(System.in);
System.out.println("\n请出拳:(1.石头 2.剪刀 3.布)");
int n = in.nextInt();
if (n == 1)
way = "石头";
else if (n == 2)
way = "剪刀";
else
way = "布";
return n;
}
}
package day1031.guess;
import java.util.Random;
public class Computer {
public String name;
public int score;
public String way;
public Computer() {
Random random = new Random();
int n = random.nextInt(3) + 1;
if (n == 1)
name = "刘备";
else if (n == 2)
name = "关羽";
else
name = "张飞";
}
public int showHand() {
Random random = new Random();
int n = random.nextInt(3) + 1;
if (n == 1)
way = "石头";
else if (n == 2)
way = "剪刀";
else
way = "布";
return n;
}
}
package day1031.guess;
public class Judge {
public int count;
public void judgeOne(Users users, Computer computer) {
count++;
int un = users.showHand();
int cn = computer.showHand();
System.out.println("\n" + users.name + "出拳为:" + users.way);
System.out.println(computer.name + "出拳为:" + computer.way);
if (un == 1 && cn== 2 || un == 2 && cn== 3 || un == 3 && cn == 1) {
users.score++;
System.out.println("不错,你赢得了此局的胜利!");
}else if (un == cn){
System.out.println("真可惜,此局是平局。");
}else {
computer.score++;
System.out.println("哦不,此局你输了……");
}
}
public void declareResult(Users users, Computer computer) {
System.out.println("共进行" + count + "局");
System.out.println(users.name + "赢了" + users.score + "把");
System.out.println(computer.name + "赢了" + computer.score + "把");
System.out.println("平局" + (count - users.score - computer.score) + "把");
if (users.score > computer.score)
System.out.println("^-^ 真厉害,你赢了!");
else if (users.score == computer.score)
System.out.println("-_-! 好可惜,是平局。");
else
System.out.println("v_v 太惨了,你输了……");
}
}
package day1031.guess;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
System.out.println("******************************");
System.out.println("*********欢迎进入猜拳游戏********");
System.out.println("******************************");
Scanner in = new Scanner(System.in);
System.out.println("请选择您的游戏角色:(1.曹操\t 2.张辽\t 3.夏侯惇)");
int n = in.nextInt();
Users users = new Users();
if (n == 1)
users.name = "曹操";
else if (n == 2)
users.name = "张辽";
else
users.name = "夏侯惇";
System.out.println("\n您的游戏角色为" + users.name);
Judge judge = new Judge();
Computer computer = new Computer();
System.out.println("您将对战" + computer.name + "");
while (true){
judge.judgeOne(users,computer);
System.out.println("是否继续? (1/0)");
n = in.nextInt();
if (n == 0)
break;
}
judge.declareResult(users, computer);
}
}
于是在导师的带领下,放下手指,首先去构思:
有什么对象去参加了这个工程;
又需要这些对象去完成什么功能。
之所以上手直接就敲,便是只注重实现这个结果的本身,而没有客观去分析它的参与者与实现历程。
即更需注重参与的对象。
再与面向过程相互配合,便可以更规范的完成一个项目。包括项目书写的一些细节,切身感受 调用 的美感,逐渐体会到开发的感觉。
3.面向接口
其实相较于前两者面向过程、面向对象关于开发思维上的东西,面向接口更趋向于一种开发方式。
即是将不同类中一些相同的方法(像是猫、狗都有吃的功能),便不用在每一个类中逐个声明,编写一个有“吃”这一抽象方法的接口,之后不仅已有的类使用时将其实现即可,新生的类直接实现这一接口亦可实现此功能。
即大幅提成了程序的广泛应用性。
其实各种开发方式刚开始接触,心得体会因为开发经验的限制尚且贫瘠,不过已经感受到一些开发层面上的理解,配合经验逐步的积累,日后便会有更深刻的认识,和对此刻认识误区的更正。