Mang đến cho bạn hành trang là Kiến thức và Kinh nghiệm

Lựa chọn chủ đề bạn quan tâm

Cùng nhau thảo luận về các vấn đề

Hãy theo dõi chúng tôi nếu bạn thấy bổ ích

  1. Hỏi đáp IT
  2. Hỏi nhanh

Cách giải phương trình bậc 2 bằng OPP trong Java?

em mới học về lập trình hướng đối tượng. có bài giải phương trình bậc 2 mong các anh đánh giá giúp nó đã thoả mãn theo hướng đối tượng chưa

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package baitap;

/**
 *
 * @author Nt.InY0urEyes
 */
import java.util.Scanner;
public class PhuongTrinhBac21 {
//thuoc tinh :a,b,c
//hanh dong giai phuong trinh bac
   private int a,b,c;
    public void tinhnghiem() {
        double x1 = 0;
        double x2 = 0;
        if (a == 0) {
            if (b == 0) {
                if (c == 0)
                    System.out.println("phuong trinh vo so nghiem");
                else
                    System.out.println("phuong trinh vo nghiem");

            } else {
                x1 = (double) -c / b;// phai ep kieu
                System.out.println("nghiem la : " + x1);
            }

        } else {
            double det = 0;
            det = Math.pow(b, 2) - 4 * a * c;
            if (det < 0) {
                System.out.println("phuong trinh vo nghiem");
            } else if (det > 0) {
                System.out.println("x1=" + (-b + Math.sqrt(det)) / (2 * a));
                System.out.println("x1=" + -(b + Math.sqrt(det)) / (2 * a));
            } else {
                System.out.println("x1=x2=" + (-b / (2 * a)));
            }
        }
    }  
    //--------------------------------------------------------
    public static void main(String[] args) {
        //khoi tao doi tuong tu class : phuong trinh bac 2
        PhuongTrinhBac2 ptb2=new PhuongTrinhBac2();
        //khoi tao gia tri cho doi tuong
         Scanner input=new Scanner(System.in);
         System.out.println("nhap a:");
         ptb2.a=input.nextInt();
         ptb2.b=input.nextInt();
         ptb2.c=input.nextInt();
         ptb2.tinhnghiem();
          
    }
    
muốn rèn luyện về lập trình hướng đối tượng thì phải làm sao ạ

    
}
Câu trả lời

- Bạn đã sẵn sàng thảo luận về chủ đề này. Hãy bấm "Viết bình luận", bạn có thể lựa chọn sử dụng tài khoản Facebook hoặc Google++

- Vì sự phát triển của cộng đồng CNTT/CNPM tại Việt Nam!

Unknown user
No responses yet

Anh tạm đọc qua thì thấy làm như vậy cũng tạm tạm coi là có ý đồ hướng đối tượng rồi đấy (còn lập trình thì chưa đúng đâu)
Tuy nhiên anh nghĩ các hệ số a, b,c em phải để là kiểu double chứ sao lại để kiểu int
Ngoài ra anh nghĩ là nếu đơn thuần chỉ là 1 class giải phương trình bậc 2 thì em nên cung cấp constructor với 3 tham số là 3 hệ số, và để các hệ số a,b,c là private final
Còn 1 số vấn đề nữa, em tự xem lại, chẳng hạn không nên gọi Math.pow(b,2) để tính b^2 mà gọi b*b cho nhanh.
Để rèn luyện lập trình hướng đối tượng thì em phải hiểu rõ vì sao cần đến lập trình hướng đối tượng, mục đích của lập trình hướng đối tượng là gì, ưu điểm của nó, rồi đến các nguyên lý.
Và lưu ý, không phải bao giờ lập trình hướng đối tượng cũng là cách giải quyết nên vận dụng.
Ví dụ: nếu đúng ra thì class Math của java mà hướng đối tượng thì nó phải dùng như sau mới phải:
Math m= new Math();
double x= m.sqrt(4);
Nhưng trên thực tế, Math là 1 static class (các method toàn là static và thậm chí constructor không tham số của nó cũng được khai báo là private nên không thể tạo ra instance từ ngoài).
Các class Arrays và Collections cũng tương tự.
Và bài giải phương trình bậc 2 của em cũng có thể dùng 1 static class như vậy (1 static class chuyên giải các loại phương trình bậc 1, bậc 2, bậc 3, bậc 4 chẳng hạn):
EquationResult r=Equation.solve(a,b,c):
1 Lượt thích

"Ngoài ra anh nghĩ là nếu đơn thuần chỉ là 1 class giải phương trình bậc 2 thì em nên cung cấp constructor với 3 tham số là 3 hệ số, và để các hệ số a,b,c là private final

Và bài giải phương trình bậc 2 của em cũng có thể dùng 1 static class như vậy (1 static class chuyên giải các loại phương trình bậc 1, bậc 2, bậc 3, bậc 4 chẳng hạn):
EquationResult r=Equation.solve(a,b,c):"


em không hiểu lắm về 2 câu trên anh giải thích giúp em với ạ. anh ra cho em 1 bài tập để em làm về hướng đối tượng ý ạ.để đỡ nơ mơ chút à.
1 Lượt thích

Ý 1:
Em viết như thế này này:

public class PTBac21 {
    private final double a;
    private final double b;
    private final double c;
   
    public PTBac21(double a, double b, double c) {
        this.a=a;
        this.b=b;
        this.c=c;
    }
   
    public void tinhNghiem() {
        //Tu viet
    }
}

Ý 2:
Viết thế này

public class PTBac21 {
    private PTBac21() {
        //De trong
    }
   
    public static EquationResult solve(double a, double b, double c) {
        //Tu viet
    }
   
    public static class EquationResult {
        //Tu viet
    }
}

Bài tập về hướng đối tượng:
Viết các class mô tả các đối tượng hình học phẳng, và method tính chu vi, diện tích
1 Lượt thích

Mấy bài cơ bản này thực ra chưa cần làm bằng hướng đối tượng làm gì, cồng kềnh 
Muốn rèn lập trình hướng đối tượng thì nên tập làm các bài tập dạng khác, có nhiều "đối tượng" hơn (Ví dụ như 1 ứng dụng quản lý chẳng hạn )
1 Lượt thích

ngon,thảo nào, thank anh nhiều nhiều nhá,em học mấy tuần nay mà vẫn chẳng lắm được hướng đối tượng ,sách nào cũng chỉ nói qua qua rồi ,bay, chẳng thấy ví dụ nhiều nhiều gì cả :(
1 Lượt thích

Hiểu theo cách đơn giản, là ta chia chương trình ra thành các thực thể (đối tượng), mọi thao tác đều quy thành các thao tác của chính đối tượng đó, với dữ liệu là các thuộc tính trong đối tượng.

Lấy ví dụ với bài giải pt ở trên, ta giao công việc giải pt cho 1 đối tượng, các thao tác như nhập hệ số, tìm nghiệm.. là các phương thức của đối tượng. Còn các hệ số, nghiệm.. là các thuộc tính của đối tượng đó.

Hướng đối tượng đơn giản là như vậy đó, muốn hiểu bản chất vấn đề thì quy vấn đề thành những ví dụ, những cách hiểu càng đơn giản càng tốt :P
1 Lượt thích

vâng cảm ơn anh đã chia sẻ ha.em đọc thấy họ bảo theo hướng đối tượng thì ,ko cần phải quan tâm quá nhiều tới thuật toán nữa phải ko ạ
0 Lượt thích

Không phải đâu em ạ, ý người ta muốn nói là về áp dụng nguyên lý trừu tượng hóa và che giấu sự phức tạp, che giấu dữ liệu, bao đóng dữ liệu với phương thức thành một chỉnh thể của cả cấu trúc dữ liệu và giải thuật. Đó chính là đối tượng.

Còn nói "không cần phải quan tâm quá nhiều tới thuật toán" không có nghĩa là lập trình viên không cần phải học hỏi về thuật toán nhiều nữa.

Để dễ nắm bắt lập trình hướng đối tượng cần nhớ:
Lập trình hướng đối tượng dựa trên tư duy gần với thế giới thực.
Ví dụ: 
Học sinh A học môn Toán giỏi

=> Có thể đưa ta được
Class HocSinh, class MonHoc
A là một đối tượng của class HocSinh
Toán là một đối tượng của class MonHoc

Class HocSinh có method hoc(MonHoc monhoc) trả về đánh giá học lực.

Em nên học phương pháp mô hình hóa hướng đối tượng
0 Lượt thích

cảm ơn bạn đã chia sẻ bài viết
0 Lượt thích

Từ khóa tìm kiếm

Câu trả lời mới nhất

Tin tuyển dụng