一.类和对象的概念
1.1类
自己的定义: 具有相同或相似性质对象的抽象。
1.2 对象
自己的定义: 对象是人们要进行研究的任何物体,从最简单的整数到复杂的飞机
等均可以看做是对象。
举例说明:
类 :车 ;对象:奔驰,宝马,劳斯莱斯
类 :人 ;对象:小明,小红,李平
对象一般都具有属性:一个对象用数据值来描述他的状态:
一个叫xiaoming的对象,具有年龄和姓名的属性
age = 10
name = “xiaoming”

对象还有操作:对象的操作用来改变对象的状态,对象及其操作就是对象的行为。
对象实现了数据和操作的结合:使数据和操作封装于对象的统一体中。

作者:
平平安安2

链接:http://www.imooc.com/article/15254
来源:慕课网

一.类和对象的概念
1.1类
自己的定义: 具有相同或相似性质对象的抽象。
1.2 对象
自己的定义: 对象是人们要进行研究的任何物体,从最简单的整数到复杂的飞机
等均可以看做是对象。
举例说明:
类 :车 ;对象:奔驰,宝马,劳斯莱斯
类 :人 ;对象:小明,小红,李平
对象一般都具有属性:一个对象用数据值来描述他的状态:
一个叫xiaoming的对象,具有年龄和姓名的属性
age = 10
name = “xiaoming”

对象还有操作:对象的操作用来改变对象的状态,对象及其操作就是对象的行为。
对象实现了数据和操作的结合:使数据和操作封装于对象的统一体中。
二.面向对象
2.1自己的定义:面向对象是把问题里拥有相同属性的东西建立一个类,类有属性和方法,然后创建类的一个对象,调用类的属性,方法来解决问题。有三个明显的特点 :封装,继承,多态
1.封装性
指利用类将数据和基于数据的操作封装在一起,数据被保护在类的内部,系统的其他部分只有通过被授权的操作,才能与这个类进行交流和交互。
好处:将变化隔离,便于使用,提高重用性,提高安全性
封装原则:将不需要对外提供的内容隐藏起来;把属性都隐藏,提供公共方式对外访问
2.继承性
一个类可以从其它已有的类中派生,新类保持了父类中的行为和属性,但增加了新的功能。
3.多态
指一个程序中可以有同名的不同方法共存的情况,可以利用子类对父类;方法的覆盖和重载在同一个类中定义多个同名的方法来实现。
2.3 面向对象的优点
1、易维护:采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求, 那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2、质量高:在设计时,可重用现有的,在以前的项目的领域中已被测试过的类,使系统满足业务需求并具有较高的质量。
3、效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展:由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

作者:
平平安安2

链接:http://www.imooc.com/article/15254
来源:慕课网

一、类和对象的概念

1.1类
  自己的定义: 具有相同或相似性质对象的抽象。
   1.2 对象
   自己的定义: 对象是人们要进行研究的任何物体,从最简单的整数到复杂的飞机
                    等均可以看做是对象。
举例说明:
类 :车       ;对象:奔驰,宝马,劳斯莱斯
类 :人      ;对象:小明,小红,李平
对象一般都具有属性:一个对象用数据值来描述他的状态:
            一个叫xiaoming的对象,具有年龄和姓名的属性     
            age  = 10
            name = “xiaoming”
                        
对象还有操作:对象的操作用来改变对象的状态,对象及其操作就是对象的行为。                                        
对象实现了数据和操作的结合:使数据和操作封装于对象的统一体中。

二、面向对象

2.1自己的定义:面向对象是把问题里拥有相同属性的东西建立一个类,类有属性和方法,然后创建类的一个对象,调用类的属性,方法来解决问题。有三个明显的特点 :封装,继承,多态
**1.封装性**
指利用类将数据和基于数据的操作封装在一起,数据被保护在类的内部,系统的其他部分只有通过被授权的操作,才能与这个类进行交流和交互。
好处:将变化隔离,便于使用,提高重用性,提高安全性
封装原则:将不需要对外提供的内容隐藏起来;把属性都隐藏,提供公共方式对外访问
**2.继承性**
一个类可以从其它已有的类中派生,新类保持了父类中的行为和属性,但增加了新的功能。
**3.多态**
指一个程序中可以有同名的不同方法共存的情况,可以利用子类对父类;方法的覆盖和重载在同一个类中定义多个同名的方法来实现。
2.3 面向对象的优点
1、易维护:采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求, 那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2、质量高:在设计时,可重用现有的,在以前的项目的领域中已被测试过的类,使系统满足业务需求并具有较高的质量。
3、效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展:由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

三、创建OC工程(本人电脑版本10.12 ;Xcode 版本 8.1)

好了,到这里第一个工程文件就创建完成了。
2、接下来我们就写一个类和对象的代码
创建类: 分为两个部分
1)类的声明部分
2)类的实现部分

类的声明部分:
        @interface 类名 : NSObject
        
        @end

类的实现部分
        @implementation 类名

@end

以创建一个学生的类为例:

#import <Foundation/Foundation.h>

//创建学生类

@interface Student : NSObject
{
//字段、成员变量
//@public
char _name[20];
int _num;
int _age;
}
//方法的声明. 类里面的函数-----方法
/******************************
写一个无参数 , 无返回值的方法
C:
void 函数名(void); OC:
- (void)方法名;
******************************/
- (void)eat; //方法名: eat
- (void)sleep; //方法名: sleep
- (void)playGame;
- (void)writeCode; /******************************
写一个带有一个参数 , 无返回值的方法 C语言的函数:
void 函数名(参数类型 参数) OC:
- (void)方法名:(参数类型)参数;
******************************/
- (void)setName:(char *)name; //方法名: setName:
- (void)setNum:(int)num; // setNum:
- (void)setAge:(int)age; // setAge: /******************************
写一个没参数 , 有返回值的方法 OC:
- (返回值类型)方法名;
******************************/
- (char *)getName; //方法名: getName
- (int)getNum;
- (int)getAge; /******************************
写一个带有多个参数的方法 OC: //void
- (返回值类型)标签1:(参数类型)参数1 [标签2]:(参数类型)参数2 [标签3]:(参数类型)参数3....;
除了第一个标签,后面的标签可以省略不写【空标签】,标签的作用标识参数的含义。
******************************/
- (void)setName:(char *)name //方法名: setName:num:
num:(int)num;
//- (void)setName:(char *)name :(int)num; - (void)setName:(char *)name //方法名: setName:num:age:
num:(int)num
age:(int)age; //打印对象里面所有的信息
- (void)printAllInformation;
@end @implementation Student
//实现所有的方法
- (void)eat
{
//实现跟C语言的函数一样
NSLog(@"他很能吃!");
} - (void)sleep
{
NSLog(@"吃完了,可以睡觉!");
} - (void)playGame
{
NSLog(@"他会玩英雄联盟!");
} - (void)writeCode
{
NSLog(@"他能写OC代码!");
} - (void)setName:(char *)name
{
// _name = name;
//当传入的字符串的长度超过 19 , 不接受
if (strlen(name) > 19) {
return;
}
strcpy(_name, name);
}
- (char *)getName
{
//返回_name 数组的首地址
return _name;
} - (void)setNum:(int)num
{
if (num < 0 || num > 100) {
return;
}
_num = num;
} - (void)setAge:(int)age
{
if (age < 0 || age > 200) {
return;
}
_age = age;
} - (int)getNum
{
return _num;
}
- (int)getAge
{
return _age;
}
- (void)setName:(char *)name num:(int)num
{
strcpy(_name, name);
_num = num;
}
- (void)setName:(char *)name num:(int)num age:(int)age
{
strcpy(_name, name);
_num = num;
_age = age;
} - (void)printAllInformation
{
NSLog(@"name: %s, num: %d, age: %d", _name, _num, _age);
}
@end int main(int argc, const char * argv[])
{ @autoreleasepool {
//实例化对象 Student *stu1 = [Student alloc]; // stu1->_id = 10;
// NSLog(@"id: %d", stu1->_id); //[对象指针 方法]
//通过stu1给对象发送了 eat消息
//通过对象指针,给对象 发送消息
//对象执行这个 eat方法,相应消息
[stu1 eat]; [stu1 sleep]; [stu1 playGame]; [stu1 writeCode]; //调用带有一个参数的方法
[stu1 setName:"zhangsan"]; //OC自诩为最优雅的语言
NSLog(@"name: %s", [stu1 getName]); [stu1 setNum:1];
NSLog(@"num: %d", [stu1 getNum]); //创建一个新的对象 stu2
Student *stu2 = [Student alloc]; [stu2 setName:"lisi"];
[stu2 setAge:20];
[stu2 setNum:2]; NSLog(@"name: %s", [stu2 getName]);
NSLog(@"num : %d", [stu2 getNum]);
NSLog(@"age : %d", [stu2 getAge]); [stu2 setName:"wangwu" num:3];
NSLog(@"name: %s", [stu2 getName]);
NSLog(@"num : %d", [stu2 getNum]);
[stu2 printAllInformation]; //创建一个新的对象 stu3
Student *stu3 = [Student alloc];
[stu3 setName:"yangliu" num:10 age:23];
[stu3 printAllInformation]; }
return 0;
}

3. 类中实例变量的权限

3.1 类的封装性, 数据的保护

3.2 三种权限和默认的权限

成员变量有3种访问权限:
 直接访问权限           类里      类外
 @public    公共的      V        V
 @protected 受保护的    V(子类)   X    (默认)
 @private   私有的      V        X

4 方法        方法(函数,消息)(有实例方法和类方法)见上述代码

实例化方法也叫对象方法同时也叫减方法  - (void)方法名;

非实例化也叫类方法同时也叫加方法        + (void)方法名;

-方法/对象方法/实例化方法    调用方式 [对象指针  -方法]
 +方法/类方法/非实例化方法    调用方式 [类名     +方法]

5 初始化方法(构造方法)

1、一般语言中,在创建对象时,自动调用的方法
                2、OC中,凡是用init开头的成员方法都是构造方法

【注】构造方法一般用于对象的初始化。

初始化方法格式
                <1>无参的初始化方法
                - (id)init{
                        self = [super init];//要调用父类的初始化方法初始化父类的成员变量
                        if (self) {
                        _age = 24;//初始化子类自己的变量
                        }
                        return self;//返回当前对象地址
                }
                <2>带参数的初始化方法
                - (id)initWithAge:(int)newAge{
                        self = [super init];//要调用父类的初始化方法初始化父类的成员变量
    
                        if (self) {
                        _age = newAge;//初始化子类自己的变量
                        }
                        return self;//返回当前对象地址
                }

初始化方法/构造方法(id,super,self)
                id类型
                                id: 泛型对象指针,与C语言void *类似
                 super
                                super: 用于调用父类方法的关键字(实际上就是一个编译器符号)
                self
                                self: 指向当前对象的指针
                                类内的方法进行相互调用可以用self

最后:大家可以试着自己创建一个长方形的类,有长和宽两个对象。

#import <Foundation/Foundation.h>

@interface MyRect : NSObject
{
CGFloat _length;
CGFloat _width;
}
- (void)setLength:(CGFloat)length;
- (void)setWidth:(CGFloat)width;
-(CGFloat)getLength;
-(CGFloat)getWidth;
- (CGFloat)area;
- (CGFloat)permiter;
@end #import "MyRect.h" @implementation MyRect
- (void)setLength:(CGFloat)length
{
_length = length;
}
- (void)setWidth:(CGFloat)width
{
_width = width;
}
-(CGFloat)getLength
{
return _length;
}
-(CGFloat)getWidth
{
return _width;
}
- (CGFloat)area
{
return _length * _width;
}
- (CGFloat)permiter
{
return 2 * (_length + _width);
}
@end #import <Foundation/Foundation.h>
#import "MyRect.h" int main(int argc, const char * argv[])
{ @autoreleasepool { MyRect *rect1 = [MyRect alloc]; [rect1 setLength:6];
[rect1 setWidth:7]; NSLog(@"%f==%f",[rect1 getLength],[rect1 getWidth]);
NSLog(@"area: %f", [rect1 area]);
NSLog(@"permiter: %f", [rect1 permiter]); //实例化第二个长方形
MyRect *rect2 = [MyRect alloc];
[rect2 setLength:4.5];
[rect2 setWidth:2.3];
NSLog(@"area: %f", [rect2 area]);
NSLog(@"permiter: %f", [rect2 permiter]);
}
return 0;
}

OC第一节 —— 类和对象的更多相关文章

  1. OC学习5——类和对象

    1.OC是在C语言基础上进行扩展得到的一门面向对象的程序设计语言,它也提供了定义类.成员变量和方法的基本功能.类可以被认为是一种自定义的数据类型,使用它可以定义变量,所有使用类定义的变量都是指针类型的 ...

  2. JAVA入门第二季 第一章 类和对象

    面向对象编程 Object Oriented Programming OOP 第一.什么是类和对象 在具体说明类和对象之前,先说说别的. 眼睛在人类身体上最为有用的器官.如果一个没有了眼睛,这个人与世 ...

  3. Java面向对象 第1节 类和对象

    一.Java 对象和类 面向对象语言三大特性:封装.继承.多态: 对象:描述客观事物的一个实体: 类:类是封装对象的属性和方法的载体,反过来说具有相同属性和行为的一类实体被称为类:类行为:方法:属性: ...

  4. OC开发系列-类与对象

    面向对象 面向对象思想是一种解决问题的思想, 不在是面向过程的去思考问题怎样解决.面向对象解决问题时首先要考虑需要找几个对象能解决这个问题. 常见的概念: * Object Oriented 面向对象 ...

  5. 前端学PHP之面向对象系列第一篇——类和对象

    × 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...

  6. Java入门第二季第一章类和对象知识点

    Java 中的 static 使用之静态方法 1. 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员.如: 如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问 ...

  7. 《Java入门第二季》第一章 类和对象

    什么是类和对象 如何定义 Java 中的类 如何使用 Java 中的对象 Java中的成员变量和局部变量1.成员变量:在类中定义,描述构成对象的组件. 2.局部变量:在类的方法中,用于临时保存数据. ...

  8. obj-c编程01:第一个类和对象的范例

    这是obj-c学习过程中的第一篇博文,接下来还会有未知的N篇内容(关键是不知道obj-c有多难搞啊!),而且在以后不断的学习中,还会不断的在以前写的博文中修改和添加新的内容.在遇到暂时无法解决的问题时 ...

  9. OC语言-01类和对象

    // cc 文件名.m -framework Foundation 编译链接 #import <Foundation/Foundation.h> //枚举性别 typedef enum{ ...

随机推荐

  1. mysql 生成排名字段

    假设有test表,下图为表机构和数据,score表示积分.现在要查询积分排名为第几的id?? 查询语句 select id,score,(@rowno:=@rowno+1) as rowno from ...

  2. wildfly jobss 同时连接多个数据源

    由于需要从一个远程机器取数据.处理后保存到本地数据库处理.用 wildfly datasource 会报: [com.arjuna.ats.arjuna] (default task-6) ARJUN ...

  3. Apache Nutch v2.3 发布,Java实现的网络爬虫

    http://www.oschina.net/news/59287/apache-nutch-2-3 Apache Nutch v2.3已经发布了,建议所有使用2.X系列的用户和开发人员升级到这个版本 ...

  4. EasyUI——常见用法总结

    1. 使用 data-options 来初始化属性. data-options是jQuery Easyui 最近两个版本才加上的一个特殊属性.通过这个属性,我们可以对easyui组件的实例化可以完全写 ...

  5. 百度云管家 5.3.6 VIP破解不限速版下载分享|百度云管家破解提速

    百度云管家PC客户端v5.3.6绿色版本,属于VIP破解不限速版.百度网盘为您提供文件的网络备份.同步和分享服务.空间大.速度快.安全稳固,支持教育网加速,支持手机端.它支持便捷地查看.上传.下载云端 ...

  6. [中英双语] 数学缩写列表 (List of mathematical abbreviations)

    List of mathematical abbreviations From Wikipedia, the free encyclopedia 数学缩写列表 维基百科,自由的百科全书 This ar ...

  7. VGA 视频输出

    VGA Video Output by Nathan Ickes Introduction VGA is a high-resolution video standard used mostly fo ...

  8. JavaScript 日历

    效果图: <html> <head> <script language="javascript"> /*@ 解题思路: .计算本月有多少天(先要 ...

  9. Latex论文写作-Texsdudio 快捷键总结

    Latex论文写作-Texsdudio 快捷键总结  The keyboard shortcuts can be modified at Options -> Shortcuts. The fo ...

  10. Java中关于HashMap的元素遍历的顺序问题

    Java中关于HashMap的元素遍历的顺序问题 今天在使用如下的方式遍历HashMap里面的元素时 1 for (Entry<String, String> entry : hashMa ...